2015-02-24 74 views
0

我有一个控制器,该方法在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调用吗?

回答

1

this blog post

有这个几个替代如下提到您不能发布到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方法签名。

+0

第一个选项的工作完美,我没有想到,谢谢 – 2015-02-24 11:22:09

+1

@AlbertCortada欢迎只是**注意**:通过URL传递凭据是不好的做法,所以我会建议如果可能为您选择第三个选项。 – 2015-02-24 11:31:13

+0

现在这是不可能的,但我会在即将到来的代码评论中考虑到这一点 – 2015-02-24 11:49:21

相关问题