我正在尝试将没有模型的服务上的参数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);
}
}
答案 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); }
});