簡體   English   中英

Web Api .NET Core的簡單POST

[英]Simple POST with Web Api .NET Core

盡管在stackoverflow上發現了不同的問題和答案,但我無法生成代碼。

這是我的問題,我想接收客戶端的UsernamePassword來執行驗證(相等性僅用於示例)。

但是, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM