我在web api的控制器中有这个方法
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
});
它给了我错误:
消息:“找不到与请求URI”http://localhost:19860/Api/User/Login“匹配的HTTP资源。” MessageDetail:“在控制器'User'上找不到与请求匹配的操作。”
但是,如果我删除它的工作参数!
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!!
}
}
为什么会这样?
由于与此问题无关的原因,我无法更改网络API,因此我必须保留:
public HttpResponseMessage Login(字符串名称,字符串密码)
格式。
我可以保留这种格式并能够进行ajax调用吗?
答案 0 :(得分:1)
您无法在this blog post
中提及的Web-API方法中发布多个参数以下几种方法可供选择。
<强> 1 即可。尝试在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
});
你将获得name = name和密码=传递你的api控制器。
<强> 2 即可。创建自己的活页夹,如this blog post中所实现。
第3 即可。将所有Web-API方法参数包装在一个对象或类型中(推荐)。
从上面你可以使用你在问题中提到的第一种和第二种方法,你不能改变你的api方法签名。