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

时间:2017-04-26 05:50:55

标签: angularjs asp.net-web-api asp.net-core asp.net-web-api2 angular-http

我想从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);

但我得到的是“无聊”。 &#39;用户&#39;中的价值API的变量。 请帮我。

图片:在API参数中添加[FromBody]后显示错误。 enter image description here

4 个答案:

答案 0 :(得分:0)

  

实际上,您只传递了一个参数并将数据返回到响应中。因此,使用GET方法而不是POST方法通过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);
    }
    

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

首先将application/json设置为JSON.stringify({user: 'm2pathan'},然后发送无效的JSON。使用string构建有效的JSON。

然后,在您的ASP.NET Core应用程序中,您需要在操作Login中使用复杂类型而不是简单类型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" }); } 操作更改为

{{1}}

现在你应该没事。

答案 3 :(得分:0)

问题与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
}