WebApi GET和没有模型的多个POST参数始终为null

时间:2015-05-27 08:32:27

标签: asp.net-mvc rest asp.net-web-api

我正在尝试将没有模型的服务上的参数get和post发送给方法,但它始终为null。我怎么解决这个问题?这个问题的逻辑原因是什么?我遇到问题的代码如下;

[HttpGet]
public Result GetUser(string userId)
{
    using (DataContext dc = new DataContext())
    {
        return dc.GetUser(userId);
    }
}

[HttpPost]
public Result CreateUser([FromBody]string firstname, [FromBody]string lastname)
{
    using (DataContext dc = new DataContext())
    {
        return dc.CreateUser(firstname, lastname);
    }
}

3 个答案:

答案 0 :(得分:1)

根据HTTP协议,您在Post请求中尝试执行的操作无效。每个Web请求只能有1个主体,虽然可以以非结构化形式传递单个参数,但是不可能有两个(源Asp.net网站here)。因此,您有两个选择:

1)。将2个参数添加到网址 - 将[FromBody]更改为[FromUri]

2)。将两个参数封装到类/模型中,并接受它作为post方法的输入(从body或URL / URi都可以工作)。数据的发送者将能够通过xml或json指定他们希望如何发送它,默认情况下使用asp.net Web api

答案 1 :(得分:1)

'FromBody'属性只能用于方法上的单个参数,因此用'FromBody'标记它们都不起作用。 您可以创建一个包含“firstname”和“lastname”作为属性的简单模型,并为post方法提供该类型的参数。

另一个解决方案是使用从解析Json获得的动态对象来获取属性。

dynamic foo = JObject.Parse(jsonText);

string firstname = foo.firstname;

string lastname = foo.lastname;

答案 2 :(得分:0)

示例ajax调用以使用您的web api

 $.ajax({
        url: "http://localhost:49493/api/Values",
        type: "Get",
        data: {'userId' : 1}
        success: function (data) { 
            /// process data
        },
        error: function (msg) { alert(msg); }
    });