web api post方法是否包含多个参数?

时间:2015-02-24 10:19:15

标签: post parameters asp.net-web-api

我在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调用吗?

1 个答案:

答案 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方法签名。