当我在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控制器的相同行为?
编辑:创建相应的类并替换参数不是一种选择,因为消息传递工具会检查这些方法以进行维护。签名应保持不变。
答案 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);
});