如何在ASP.NET?

时间:2016-09-16 09:33:38

标签: c# asp.net json asp.net-mvc asp.net-web-api

当我在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控制器的相同行为?

编辑:创建相应的类并替换参数不是一种选择,因为消息传递工具会检查这些方法以进行维护。签名应保持不变。

3 个答案:

答案 0 :(得分:2)

尝试从这些值中组合一个对象:

public class Foo
{
    public int id {get;set;}
    public int name {get;set;}
}

public HttpResponseMessage Post([FromBody] Foo foo) 
{
    //some stuff...
}

如果签名保持不变,您可以尝试在url中指定params,例如:myurl?id=1&name=Tom仍然通过POST动词。

答案 1 :(得分:2)

您可以尝试这样:

public HttpResponseMessage Post([FromBody]dynamic value)
{
    int id= value.id.ToString();
    string name = value.name.ToString();
}

并传递json,如下面的

{
  "id":"1",
  "name":"abc"
}

答案 2 :(得分:1)

如果您必须传递多个参数,请使用类对象

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