![](/img/trans.png)
[英]Post with int/string (simple type) in body to asp.net core web api 2.1 not working
[英]Simple POST with Web Api .NET Core
尽管在stackoverflow上发现了不同的问题和答案,但我无法生成代码。
这是我的问题,我想接收客户端的Username
和Password
来执行验证(相等性仅用于示例)。
但是, LoginPost
变量始终为null
。 此外,我很难理解同时发送客户端http代码和json的最佳方法。
using Microsoft.AspNetCore.Mvc;
using web.Models;
namespace web.Controllers
{
[Produces("application/json")]
[Route("api/[controller]")]
public class LoginController : ControllerBase
{
[HttpPost]
public ActionResult<LoginPost> LoginPost([FromBody] LoginPost loginPost)
{
// (1) FAIL, loginPost variable is null
if (loginPost.Username == loginPost.Password)
{
return loginPost;
}
// (2) How to add a message like "User/Password fails"
return Unauthorized();
}
}
}
请注意代码中的注释(1)和(2)。
这是jQuery code
$.ajax({
url: '../api/Login',
type: 'POST',
dataType: "json",
contentType: "application/json, charset=utf-8",
data: {
Username: username,
Password: password
},
statusCode: {
200: function (data) {
console.log(data);
}
401: function (data) {
console.log(data);
}
500: function (data) {
console.log(data);
}
}
});
和LoginPost.cs
类:
public class LoginPost
{
public string Username { get; set; }
public string Password { get; set; }
}
由于您似乎不想使用json
,因此请以表格形式发布数据。
从您的Ajax调用中删除contentType: "application/json, charset=utf-8",
。
'application/x-www-form-urlencoded; charset=UTF-8'
'application/x-www-form-urlencoded; charset=UTF-8'
是默认值,因此数据将以表格形式发送。 同时删除[FromBody]
属性,它应该可以工作
对于(2)问题,您可以返回状态代码:
return StatusCode(401, "User/Password fails");
登录控制器工作正常,我在Postman上进行了测试。 问题在于ajax调用:它不将数据作为POST
请求的主体发送,而是作为URL查询参数(即Username=username&Password=password
)发送。
要在POST
请求的正文中发送数据,您需要将数据作为json
字符串发送:
data: JSON.stringify({
"Username": "username",
"Password": "password"
}),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.