如何将参数从 AngularJS $http.post 传递到 ASP .NET Web API 核心

How to pass parameter from AngularJS $http.post to ASP .NET Web API core

我想从 Angular 网页调用 ASP .NET Web API。 我写了以下内容 API:

[HttpPost("Login")]
public async Task<IActionResult> Login(string user)
{
   return Json(new RequestResult
   {
     State = RequestState.Success,
     Msg = "Welcome"
   });
}

并在 Angular 中调用上面的代码:

$http({
        method: 'post',
        url: 'http://localhost:50087/api/tokenauth/login',
        data: 'm2pathan',
        headers: {
                   'Content-type': 'application/json, charset=UTF-8'
                 }
     }) 
   .then(function loginSuccessCallback(response) {
   console.log("In loginSuccessCallback", response);

但我在 API 的 'user' 变量中得到 'Null' 值。 请帮我。

图片:在 API 的参数中添加 [FromBody] 后显示错误。

Actually you have passing only one parameter and return the data to response. So the better way to use GET method instead of POST method with pass the parameter via QueryString


  • 但是如果你只想要POST方法,那么你可以按照下面的方式

    var body = JSON.stringify({ user: 'm2pathan'});
    $http.post('http://localhost:50087/api/tokenauth/login', body)
    .then(function loginSuccessCallback(response) {
    console.log("In loginSuccessCallback", response);
    }
    

除了@Ramesh 回答之外,如果您需要从请求正文中填充用户,您应该使用 [FromBody] 属性(参见 model binding):

[HttpPost("Login")]
public async Task<IActionResult> Login([FromBody] string user)

您的代码中存在几个问题:

首先您将 Content-Type 设置为 application/json,但随后您发送了无效的 JSON。使用 JSON.stringify({user: 'm2pathan'} 构建有效的 JSON.

然后在您的 ASP.NET 核心应用程序中,您需要在操作 Login 中使用复杂类型而不是简单类型 string。很可能您无论如何都需要发送密码和其他参数,因此请像这样添加 class:

public class LoginRequest
{
    public string User { get; set; }
}

然后将您的 Login 操作更改为

[HttpPost("Login")]
public async Task<IActionResult> Login([FromBody]LoginRequest request)
{
    return Json(new RequestResult
    {
        State = RequestState.Success,
        Msg = "Welcome"
    });
}

现在你应该没事了。

问题与 CORS(跨源资源共享)有关。 我在 ConfigureServices() 方法中的 startup.cs 中添加了策略,如下所示:

services.AddCors(options =>
{
    options.AddPolicy("CorsPolicy",
        builder => builder.AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials());
});

并在动作之前添加为:

[EnableCors("CorsPolicy")]
[Produces("application/json")]
[Route("api/[controller]")]
public class TokenAuthController : Controller
{
    //my action methods
}