【问题标题】:Getting Error 400 When Calling A Web Api Method Using Ajax使用 Ajax 调用 Web Api 方法时出现错误 400
【发布时间】: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 错误错误请求。怎么了?

【问题讨论】:

    标签: c# jquery ajax asp.net-web-api asp.net-web-api2


    【解决方案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 尝试清理浏览器缓存
    猜你喜欢
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2019-03-20
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多