web api post方法可以包含多个参数吗?
问题描述:
我有一个控制器,该方法在Web APIweb api post方法可以包含多个参数吗?
public class UserController : ApiController
{
[HttpPost]
public HttpResponseMessage Login(string name, string password){
//dothings
}
}
但如果我尝试一个Ajax请求:
$.ajax({
type: "POST",
url: "http://localhost:19860/Api/User/Login",
data: { name: "name", password: "12345" },
success: succ,
error: err
});
它给我的错误:
消息:“没有HTTP发现与请求URI'http://localhost:19860/Api/User/Login'匹配的资源。“ MessageDetail:“在控制器'用户'上找不到与请求匹配的操作。”
但是,如果我删除它的工作参数!
public class UserController : ApiController
{
[HttpPost]
public HttpResponseMessage Login(){
string name= HttpContext.Current.Request.Params["name"];
string password= HttpContext.Current.Request.Params["password"];
// name and password have the value that i passed in the ajax call!!
}
}
为什么它是这样的?
对于这个问题无关的原因,我不能更改Web API,所以我必须在十个分量:
公共HttpResponseMessage登录(字符串名称,字符串密码)
格式。
我可以维持这种格式并能够进行ajax调用吗?
答
有这个几个替代如下提到您不能发布到Web的API方法多参数。
。尝试在queryString上传递它。
改变你的ajax函数调用如下。
$.ajax({
type: "POST",
url: "http://localhost:19860/Api/User/Login?name=name&pass=pass",
data: { name: "name", password: "12345" },
success: succ,
error: err
});
您将在您的api控制器中获得name = name和password = pass。
。在this blog post中创建您自己的绑定器。
。将所有Web-API方法参数封装在一个对象或类型中(建议使用)。
从上面你可以使用第一种和第二种方法,就像你在你的问题中提到的,你不能改变你的API方法签名。
第一个选项的工作完美,我没有想到,谢谢 – 2015-02-24 11:22:09
@AlbertCortada欢迎只是**注意**:通过URL传递凭据是不好的做法,所以我会建议如果可能为您选择第三个选项。 – 2015-02-24 11:31:13
现在这是不可能的,但我会在即将到来的代码评论中考虑到这一点 – 2015-02-24 11:49:21