c# - 如果 .NET Core 3.1 中控制器方法中的参数构造失败,如何更改 http 响应错误消息?
问题描述
我有一个控制器方法,它将 SignUpDTO 对象作为参数。这是 SignUpDTO 类代码,以及提到的控制器方法的标头:
[HttpPost("register")]
public async Task<ActionResult<UserDTO>> SignUpAsync([FromBody] SignUpDTO signUpData)
...
public class SignUpDTO
{
[Required]
[StringLength(100, MinimumLength = 3)]
public string Username { get; set; }
[Required]
[RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,15}$")]
public string Password { get; set; }
[Required]
[RegularExpression(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$")]
public string MailAddress { get; set; }
}
属性装饰有一些验证数据的属性。我的问题是,如果http请求附带了一些无效数据,该方法的执行甚至没有开始。在这里,我包括我的 api 发送的示例性响应:
{
"errors": {
"MailAddress": [
"The field MailAddress must match the regular expression '^([\\w\\.\\-]+)@([\\w\\-]+)((\\.(\\w){2,3})+)$'."
]
},
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|fcfb9908-4cd92abdc9dea235."
}
我想更改随响应发送的 JSON 对象,并只发送简单的消息以与其他方法保持一致。响应应如下所示:
{
"message": "Improper mail address!"
}
如果对象的构造失败,是否可以更改默认响应?如果不是我怎么能解决我的问题?谢谢
解决方案
所有扩展的属性都允许您通过设置属性(MSDN 链接ValidationAttribute
)来提供自定义错误消息:ErrorMessage
[RegularExpression(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$", ErrorMessage = "Improper mail address!")]
推荐阅读
- java - sprin-boot 应用程序的 Dockerfile 无法构建映像
- reactjs - 如何设置固定在框右侧的图标?
- c++ - 每个服务器请求的内存预算
- c - C - htoi 函数
- php - csv 到 json,无法正确编码输出
- r - How to create grouped bar plot instead of facet_wrap in R?
- spring - JHipster 和 DBConfiguration
- nestjs - NestJS - 从其他服务向服务中注入当前请求不起作用
- java - 我的代码说小程序没有初始化
- php - 检查字符串中的多个单词并显示找到/未找到的单词