先前在网上看的一段代码 ,一直不知道JsonObject是什么对象
[HttpPost]
public async void submitForm()
{
StringBuilder sb = new StringBuilder();
HttpContent content = Request.Content;
JsonObject jsonValue = await content.ReadAsOrDefaultAsync<JsonObject>();
foreach (var x in jsonValue)
{
sb.Append(x.Key);
string va ;
if (x.Value.TryReadAs<string>(out va))
{
sb.Append(va);
}
}
}
然后又在网上无意发现了下面这段代码
public HttpResponseMessage Put(JObject jObj)
{
dynamic input = jObj;
int TravelPlanID = input.TravelPlanID;
int ProspectStatusType = input.ProspectStatusType;
}
发现JObject类型就是上面的JsonObject类型
JObject接收的数据类型为json类型,如:{"key":"123","value":"123"}
做个记录.
End.
--------------------------------------------------------------------------------------------------------------------------------------------
****************************** 另一篇 *****************************
--------------------------------------------------------------------------------------------------------------------------------------------
之前看了http://www.cnblogs.com/dudu/archive/2012/05/11/asp_net_webapi_httpclient.html写的httpclient+webapi的一个例子,参考他的代码子阶写了一个,结果请求服务获取的参数都是空的,而将参数绑定在url中则可以正常得到参数,折腾好久,终于在网上找到了相关资料,原来RC版WebApi在参数绑定上发生了些变化。
rc版的webapi参数绑定器分为两种:
1.Model Binding
2.Formatters
其中Model Binding仅从url中取值,这点是与mvc的model binding有区别的,
formatters是从request的body中取值,并且是把整个body作为一个(不可为多个)对象解析为一个参数。
/?id=123&name=bob void Action(int id, string name) // 两个参数都是基本类型,则从url中获取
/?id=123&name=bob void Action([FromUri] int id, [FromUri] string name) // 标记为FromUri的参数从url中获取.
void Action([FromBody] string name); // 标记为FromBody的参数从request的body中取值.
public
class
Customer {
// a complex object
public
string
Name {
get
;
set
; }
public
int
Age {
get
;
set
; }
}
|
/?id=123 void Action(int id, Customer c) // id 从url获取, c 是一个自定义类型,从request的body中取值.
void Action(Customer c1, Customer c2) // 这样的写法是错误的,从request的body中取值的参数只能有一个
void Action([FromUri] Customer c1, Customer c2) // 这样是正确的, c1 从url获取 、 c2 从request的body中取值
void Action([ModelBinder(MyCustomBinder)] SomeType c) //指定一个明确的模型绑定器使用来创建参数.
// 位置属性类型声明应用于所有的参数实例
[ModelBinder(MyCustomBinder)]
public
class
SomeType { }
|
void Action(SomeType c) // c的类型指定使用model binding.
到此,已经明白为什么RC版下服务获取参数为空了,也知道如何处理了。