假设您有以下代码
public class MyClass {
public double Latitude {get; set;}
public double Longitude {get; set;}
}
public class Criteria
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public MyClass MyProp {get; set;}
}
[HttpGet]
public Criteria Get([FromUri] Criteria c)
{
return c;
}
我想知道是否有人知道有一个库可以将任何对象转换为 WEB API 2 Controller 可以理解的查询字符串。
这是我想要的示例
SerializeToQueryString(new Criteria{StartDate=DateTime.Today, EndDate = DateTime.Today.AddDays(1), MyProp = new MyProp{Latitude=1, Longitude=3}});
=> "startDate=2015-10-13&endDate=2015-10-14&myProp.latitude=1&myProp.longitude=3"
使用 httpClient 的完整示例可能如下所示:
new HttpClient("http://localhost").GetAsync("/tmp?"+SerializeToQueryString(new Criteria{StartDate=DateTime.Today, EndDate = DateTime.Today.AddDays(1), MyProp = new MyProp{Latitude=1, Longitude=3}})).Result;
目前,我使用一个版本(取自一个我再也没有找到的问题,也许 How do I serialize an object into query-string format? ...)。
问题是它除了简单属性之外不起作用。 例如,在 Date 上调用 ToString 不会提供 WEB API 2 Controller 可解析的内容...
private string SerializeToQueryString<T>(T aObject)
{
var query = HttpUtility.ParseQueryString(string.Empty);
var fields = typeof(T).GetProperties();
foreach (var field in fields)
{
string key = field.Name;
var value = field.GetValue(aObject);
if (value != null)
query[key] = value.ToString();
}
return query.ToString();
}
最佳答案
“将任何对象转换为查询字符串”似乎暗示有一个标准格式,但实际上并没有。所以你需要选择一个或自己推出。由于可用的优秀库,JSON 似乎是显而易见的选择。
关于asp.net-web-api - 如何将 GET 中的复杂对象发送到 WEB API 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33099089/