使用 Ajax 调用 Web Api 方法时出现错误 400
Posted
技术标签:
【中文标题】使用 Ajax 调用 Web Api 方法时出现错误 400【英文标题】:Getting Error 400 When Calling A Web Api Method Using Ajax 【发布时间】:2021-10-28 14:05:06 【问题描述】:我正在尝试使用 Ajax 调用本地 Web Api 方法。因此,我在本地机器上的 Visual Studio 上运行了一个基本的 Web api 应用程序。这是我的ajax调用
let RegisterUserVM = new Object();
RegisterUserVM.Name = name;
RegisterUserVM.Username = username;
RegisterUserVM.Password = password;
$.ajax(
url: mURL + "api/Default/RegisterUser",
method: "POST",
data: JSON.stringify(RegisterUserVM),
contentType: "application/json; charset=utf-8",
dataType: "jsonp"
).done(function( msg )
console.log("Done function");
console.log(msg);
).fail(function( jqXHR, textStatus )
console.log("Fail function");
console.log(jqXHR);
console.log(textStatus);
);
我有一个简单的Web api方法如下
[HttpPost]
public string RegisterUser(/*RegisterUserVM registerUserVM*/ string Name, string username, string Password)
return "";
如您所见,我尝试通过查询字符串传递对象和参数,但是当我尝试通过 jQuery 中的 ajax 调用此方法时,仍然不断收到 400 错误错误请求。怎么了?
【问题讨论】:
【参考方案1】:修复 ajax
$.ajax(
url: mURL + "/api/Default/RegisterUser",
type: "POST",
data: JSON.stringify(RegisterUserVM),
contentType: "application/json; charset=utf-8",
dataType: "json"
success: function( msg )
console.log("Done function");
console.log(msg);
,
error: function( jqXHR, textStatus )
console.log("Fail function");
console.log(jqXHR);
console.log(textStatus);
);
和行动
[HttpPost]
public string RegisterUser([FromBody] RegisterUserVM registerUserVM)
return "";
你需要创建一个视图模型
public class RegisterUserVM
public string Name get; set;
... ans so on
或者你也可以试试这个
$.ajax(
url: mURL + "/api/Default/RegisterUser",
type: "POST",
data: registerUserVM : RegisterUserVM ,
success: function( msg )
console.log("Done function");
console.log(msg);
,
error: function( jqXHR, textStatus )
console.log("Fail function");
console.log(jqXHR);
console.log(textStatus);
);
并删除 [frombody]
[HttpPost]
public string RegisterUser(RegisterUserVM registerUserVM)
return "";
【讨论】:
您好,我已经尝试过您的建议,但仍然出现该错误。在调查 chrome 上的开发工具时,这是通过 localhost:44397/api/Default/… 的实际 url,这对我来说看起来不正常,那里发生了什么?此外,当我使用 ssl localhost:44397/api/Default/… 通过邮递员提出此请求时,它会命中 web api 中的方法, @ShatterStar ajax 有错别字,将“method”替换为“type”再试一次 @ShatterStar 你的网址很奇怪,你的网址应该是localhost:44397/api/Default/RegisterUser。你用什么东西来改变网址吗? 您好,我已将方法更改为键入,但仍然出现相同的错误。是的,查询字符串真的很奇怪。不,我没有使用任何东西来更改 url,因为它是上面的普通 ajax 构造函数。 @ShatterStar 尝试清理浏览器缓存以上是关于使用 Ajax 调用 Web Api 方法时出现错误 400的主要内容,如果未能解决你的问题,请参考以下文章
从 Ajax 调用 Spring Boot Rest API 时出现 CORS 错误
使用 ajax() 和 jsonp 调用 asp.net 远程 Web 服务 .asmx 时出现意外令牌 <
使用 jquery ajax 从 asp.net 网页表单页面调用 web api url