![](/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.