如何在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:创建相应的类和替换参数不是一个选项,因为消息传递工具会检查这些方法以进行维护。签名应保持不变。

如何在ASP.NET中绑定Json参数到Web Api参数

尝试用这些值组成一个对象:

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);
});