繁体   English   中英

使用jQuery向Web API发布多个参数

[英]Posting multiple parameters to Web API using jQuery

像我之前的许多人一样,我正在尝试将多个参数传递给Web API项目。 我尝试过在这个网站上提供的几种解决方案,但没有运气。 我最近的失败迭代看起来如下:

控制器

public class UserDTO
{
   public int userID;
   public string username;
}

[HttpPost]
public string Post([FromBody]UserDTO userDTO)
{
   return userDTO.userID.ToString() + " " + userDTO.username;
}

Web API路由配置

config.Routes.MapHttpRoute(
   name: "DefaultApi",
   routeTemplate: "api/{controller}/{id}",
   defaults: new { id = RouteParameter.Optional }
);

jQuery

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参数很困难。 有任何想法吗?

你的jQuery ajax调用失败了吗? 检查一下?

var apiUrl = "http://localhost:55051/api/UserController/Post";

看到你的代码应该是:

var apiUrl = "http://localhost:55051/api/User";

单词控制器通常不是您的URL的一部分。 您不必显式调用POST,它应该按照惯例选择它,因为您的ajax调用是POST。

编辑:

上面和你的ajax调用中的套管作为评论。

我个人使用Firebug(Firefox扩展)来调试这些案例。 如果在这种情况下发现它比提琴手更方便。

我的猜测是你必须传递:{userDTO:{userID ...}}作为jquery中的数据。 请求被包装。 当然,你必须对此进行字符串化。

现在您传递参数但它们都不匹配userDTO,因此它获取默认值。

在这里看到我以前的答案: Jquery帖子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM