我正在开发一个自定义的 ValidationAttribute,大致如下:
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
public class CustomRegexValidator : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (!Regex.Match((string)value, "^[a-zA-Z0-9]+(?:-?[a-zA-Z0-9]+)+$").Success)
{
return new ValidationResult("Invalid Format");
}
return ValidationResult.Success;
}
}
响应看起来像这样:
{
"errors": {
"variableName": [
"Invalid Format"
]
},
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-f8c2d18438cfa0cea6967f46a5bf8ba1-0f3447a15a1dbc-00"
}
但是,我需要从前端动态访问传递的字符串,并且嵌套格式将不起作用。是否可以为此创建自定义响应?
您看到的响应是使用 ProblemDetails 类的基于标准的响应。 在服务器端开始改变这些东西并不是一个好主意。 最好修复你的客户端。
但是如果必须的话,您可能必须让 ASP.NET 按原样呈现输出,然后使用 ActionFilter 将其操作为您想要的内容。
ActionFilter 允许您获取潜在的 HTTP 输出流,并在服务器传输它之前将其更改为其他内容。 我已经使用这种方法来允许 HTML 中的全局宏,或插入全局脚本。 您可以对 JSON 执行相同的操作。 您必须检查您是否正在使用正确的 Content-Type 操作响应,然后确保您没有弄乱与这些错误响应无关的 JSON。
在这里查看更多。
https://blog.rsuter.com/post-process-the-html-output-of-an-action-in-asp-net-mvc/