首页 > 解决方案 > Getting Error 400 When Calling A Web Api Method Using Ajax

问题描述

I am trying to call a local Web Api method using Ajax. So I have a basic web api app running on visual studio on my local machine. Here's my ajax call

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);
          });
    }

I have a simple Web api method as follows

[HttpPost]
public string RegisterUser(/*RegisterUserVM registerUserVM*/ string Name, string username, string Password)
{
   return "";
}

As you can see I have tried passing the object and parametes via the query string but I still keep getting an 400 error bad request when I try and call this method via ajax from jQuery. What is wrong?

标签: c#jqueryajaxasp.net-web-apiasp.net-web-api2

解决方案


修复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 "";
}

推荐阅读