繁体   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