使用 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 的 Web api Post 调用失败

使用 ajax() 和 jsonp 调用 asp.net 远程 Web 服务 .asmx 时出现意外令牌 <

使用 jquery ajax 从 asp.net 网页表单页面调用 web api url

SharePoint REST API。在 SharePoint 列表上进行 AJAX 调用时出现 400 错误请求

调用 Web API 2 端点时出现 HTTP 415 不支持的媒体类型错误