【发布时间】:2020-01-07 23:08:55
【问题描述】:
当我要转换的 JsonTokenType 和 object/struct 之间存在类型不匹配时,我试图做的是抛出我自己的异常。
比如我的对象是LoginRequest:
public class LoginRequest
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}
还有我的控制器:
[HttpPost]
public async Task<IActionResult> CreateCredentialsAsync([FromBody] LoginRequest request)
{
// Do Stuff
}
但是,如果用户为用户名/密码提供整数而不是字符串(或任何类型不匹配),我想提供自定义异常。
例如,假设客户端使用以下 JSON 正文调用我的服务器:
POST {ip}/api/login
content-type: application/json
{
"username": 123,
"password": "password"
}
现在从IAsyncActionFilter 我可以阅读ModelState 并看到它是无效的,但我看不到区分错误原因和抛出不同异常的方法。
我想做的是抛出一个CustomBadRequestException(errorCode: 3, message: "Really, you think that should be a number and not a string"),但如果他们根本没有提供用户名,我想抛出DifferentCustomBadRequestException(errorCode: 2, message: "Nice try hacker")
我是否需要自定义模型绑定器才能执行此操作(甚至扩展现有模型绑定器),或者我是否需要某种反序列化设置和/或转换器,可以根据问题提供更具体的异常,还是两者都有?
额外问题:是否可以在调用操作过滤器之前收集模型状态中的所有错误(这听起来绝对需要自定义模型绑定器,但我想我会问)?
【问题讨论】:
标签: c# asp.net-core