使用带有 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
杰克逊 Kotlin 控制器中请求正文的序列化不与 restTemplate 一起使用,与邮递员一起使用