首页 > 解决方案 > 如果 .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!"
}

如果对象的构造失败,是否可以更改默认响应?如果不是我怎么能解决我的问题?谢谢

标签: c#apihttp.net-core

解决方案


所有扩展的属性都允许您通过设置属性(MSDN 链接ValidationAttribute)来提供自定义错误消息:ErrorMessage

[RegularExpression(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$", ErrorMessage = "Improper mail address!")]

推荐阅读