假设你有下面的代码如何GET发送复杂的对象,以WEB API 2
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控制器理解的字符串。
这里是我想
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? ...)。
问题是它不适用于其他任何东西而不是简单的属性。 例如,要求在日期的ToString不会放弃的东西是通过WEB API 2控制器可解析...
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发布呢? – Jehof
,因为HTTP动词在REST中具有语义。 例如POST /产品做搜索很尴尬,因为你会认为这是一个创建 –
序列化为JSON和URL编码? –