像我之前的许多人一样,我正在尝试将多个参数传递给Web API项目。我尝试过在这个网站上提供的几种解决方案,但没有运气。我最近的失败迭代看起来如下:
public class UserDTO
{
public int userID;
public string username;
}
[HttpPost]
public string Post([FromBody]UserDTO userDTO)
{
return userDTO.userID.ToString() + " " + userDTO.username;
}
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var apiUrl = "http://localhost:55051/api/User/Post";
var userDTO = {
userID: 5,
username: "testuser"
};
$.ajax({
type: "POST",
url: apiUrl,
data: JSON.stringify(userDTO),
datatype: "json",
contenttype: "application/json; charset=utf-8"
)};
Fiddler显示正确传递的JSON变量,在Raw视图中我可以看到:
{"userID":5,"username":"testuser"}
userID = 0
username = null
我认为问题出在Web API上,并且由于我的POST似乎在Fiddler中正确格式化,因此难以使用JSON参数。有什么想法吗?
答案 0 :(得分:2)
你的jQuery ajax调用失败了吗?检查一下?
var apiUrl = "http://localhost:55051/api/UserController/Post";
看到你的代码应该是:
var apiUrl = "http://localhost:55051/api/User";
字控制器通常不是您网址的一部分。您不必显式调用POST,它应该按照惯例选择它,因为您的ajax调用是POST。
编辑:
以上和你的ajax调用中的套管作为评论。
我个人使用Firebug(Firefox扩展程序)来调试这些案例。如果在这种情况下发现它比提琴手更方便。
答案 1 :(得分:1)
我的猜测是你必须传递:{userDTO:{userID ...}}作为jquery中的数据。 请求被包装。 当然,你必须对此进行字符串化。
现在您传递参数但它们都不匹配userDTO,因此它获取默认值。
请在此处查看我之前的回答:Jquery post