使用带有 DTO 的 HttpPost,邮递员无法调用 tht 方法

Posted

技术标签:

【中文标题】使用带有 DTO 的 HttpPost,邮递员无法调用 tht 方法【英文标题】:Using HttpPost with DTO, postman is not able to invoke tht method 【发布时间】:2021-07-19 05:24:58 【问题描述】:

下面是我尝试将输入作为 DTo 传递的 HttpPost 方法

[HttpPost("register")]
    public async Task<ActionResult<AppUser>> Register(RegisterDto registerDto)
    
        if (await UserExists(registerDto.Username)) return BadRequest("Username is taken");

        using var hmac = new HMACSHA512();
        var user = new AppUser
        
            UserName = registerDto.Username.ToLower(),
            //UserName = username,
            PasswordHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(registerDto.Password)),
            //PasswordHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(password)),
            PasswordSalt = hmac.Key
        ;
        _context.Users.Add(user);
        await _context.SaveChangesAsync();

        return user;
    

这是我创建的 Dto 类,我在 HttpPost 方法中传递了它

注册 Dto 类:-

public class RegisterDto

    public string Username  get; set; 
    public string Password  get; set; 

当我尝试在 postman 中测试此方法时,它会抛出错误为 415 unsupported media type ,请查看下图。 邮递员错误:-

enter image description here

【问题讨论】:

您必须通过正文而不是查询字符串传递参数 【参考方案1】:

您可能希望使用 JSON 属性装饰您的 DTO,使其看起来像这样:

public class RegisterDto

    [JsonProperty("username")]
    public string Username  get; set; 
    [JsonProperty("password")]
    public string Password  get; set; 

然后在您的 JSON 帖子中为数据使用匹配的大小写


   "username":"jane@doe.com",
   "password":"somethingsecure"

【讨论】:

【参考方案2】:

对不起,我的坏事,

我需要在邮递员中选择内容类型为json,之前是纯文本,所以它会抛出错误。

如何在 postman 中将 content-type 设置为 JSON (application/json)。

转到您的 POST 请求中的正文,在那里您会找到原始选项。

在它旁边,会有一个下拉菜单,选择JSON(application.json)。

【讨论】:

以上是关于使用带有 DTO 的 HttpPost,邮递员无法调用 tht 方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件和 json 对象从邮递员传递到 asp.net 核心 webapi

php 无法读取 http post 请求正文

杰克逊 Kotlin 控制器中请求正文的序列化不与 restTemplate 一起使用,与邮递员一起使用

NET Core 6 使用 DTO 更新数据库记录时遇到问题

GraphQL 客户端应该使用哪种 Http 方法?

Asp.net Core 2 API POST 对象为空?