如何将参数从AngularJS$http.post传递到ASP.NETWebAPI核心
我想从Angular网页调用ASP.NETWebAPI。 我编写了以下API:如何将参数从AngularJS$http.post传递到ASP.NETWebAPI核心,angularjs,asp.net-web-api,asp.net-core,asp.net-web-api2,angular-http,Angularjs,Asp.net Web Api,Asp.net Core,Asp.net Web Api2,Angular Http,我想从Angular网页调用ASP.NETWebAPI。 我编写了以下API: [HttpPost("Login")] public async Task<IActionResult> Login(string user) { return Json(new RequestResult { State = RequestState.Success, Msg = "Welcome" }); } 但我在API的“user”变量中得到了“Null”值
[HttpPost("Login")]
public async Task<IActionResult> Login(string user)
{
return Json(new RequestResult
{
State = RequestState.Success,
Msg = "Welcome"
});
}
但我在API的“user”变量中得到了“Null”值。
请帮帮我
图:在API的参数中添加[FromBody]后显示错误。
实际上,您只需要传递一个参数并将数据返回到响应。因此,使用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); }
[FromBody]
属性(请参阅):
[HttpPost("Login")]
public async Task<IActionResult> Login([FromBody] string user)
[HttpPost(“登录”)]
公共异步任务登录([FromBody]字符串用户)
您的代码中有几个问题:
首先将内容类型设置为application/json
,然后发送无效的json。使用JSON.stringify({user:'m2pathan'}
构建有效的JSON
然后,在ASP.NET核心应用程序中,您需要在操作登录中使用复杂类型,而不是简单类型字符串
。很可能您仍需要发送密码和其他参数,因此添加如下类:
public class LoginRequest
{
public string User { get; set; }
}
然后将您的登录操作更改为
[HttpPost("Login")]
public async Task<IActionResult> Login([FromBody]LoginRequest request)
{
return Json(new RequestResult
{
State = RequestState.Success,
Msg = "Welcome"
});
}
[HttpPost(“登录”)]
公共异步任务登录([FromBody]登录请求)
{
返回Json(新的RequestResult
{
State=RequestState.Success,
Msg=“欢迎”
});
}
现在您应该没事了。问题与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
}
因为您的内容类型是json,而您发送的数据不是json文件,所以我也尝试使用json格式作为数据:{“user”:“m2pathan”}
在参数中添加[FromBody]
后,出现错误“状态代码:415不支持的媒体类型”尝试使用分号而不是逗号来分隔内容类型stringapplication/json,charset=UTF-8
中的值。您是否也可以发布Chrome/Firefox开发工具的屏幕截图?查看服务器上和服务器上的确切标题?当然,请检查您似乎正在向跨源资源发送请求,这可能是t的根本原因这是一个问题。我不是这里的专家,所以我不确定我是否能帮你。我提出的方法是在本地环境中工作,客户端和api都位于同一个源上。在参数中添加[FromBody]
后,我收到错误“状态代码:415不支持的媒体类型”
[EnableCors("CorsPolicy")]
[Produces("application/json")]
[Route("api/[controller]")]
public class TokenAuthController : Controller
{
//my action methods
}