如何在ASP.NET中绑定Json参数到Web Api参数
本文关键字:参数 Json Web Api 绑定 ASP NET | 更新日期: 2023-09-27 18:07:17
当我在MVC控制器中有这个方法
[HttpPost]
public async Task<ActionResult> MyMethod(int param1, string param2)
{
//....
}
我可以发送一个Json对象{param1:1, param2:"str"}
,它工作得很好,参数被解决了。然而,当我为WebApi 2这样做时,它不起作用。因为根据以下文档中的示例,[FromBody]
只能被1个参数使用。
At most one parameter is allowed to read from the message body
// Caution: Will not work!
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }
我们如何从WebApi控制器获得MVC控制器的相同行为?
Edit:创建相应的类和替换参数不是一个选项,因为消息传递工具会检查这些方法以进行维护。签名应保持不变。
尝试用这些值组成一个对象:
public class Foo
{
public int id {get;set;}
public int name {get;set;}
}
public HttpResponseMessage Post([FromBody] Foo foo)
{
//some stuff...
}
如果签名应该保持不变,你可以尝试在url中指定参数,像这样:myurl?id=1&name=Tom
仍然通过POST动词
你可以这样尝试:
public HttpResponseMessage Post([FromBody]dynamic value)
{
int id= value.id.ToString();
string name = value.name.ToString();
}
并像
那样传递json{
"id":"1",
"name":"abc"
}
如果必须传递多个参数,请使用class object:
public class PortalClass
{
public ApplicationModel applicationModel { get; set; }
public string user_id { get; set; }
public string id { get; set; }
public object pageCollection { get; set; }
}
public object GetApplication(PortalClass data)
{
JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All, PreserveReferencesHandling = PreserveReferencesHandling.None };
var myObject=JsonConvert.DeserializeObject<PageCollection>(data.pageCollection.ToString(), settings)
return null;
}
客户端:var data = {
user_id: userId,
id: id
};
http.post(url, data).then(
function (response) {
}, function (err) {
callback.reject(err);
});