我想从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的变量。 请帮我。
答案 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
}