如何在 C# 中为 ValidationAttribute 制作自定义响应?

问题描述 投票:0回答:1

我正在开发一个自定义的 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"
}

但是,我需要从前端动态访问传递的字符串,并且嵌套格式将不起作用。是否可以为此创建自定义响应?

c# asp.net-mvc validationattribute
1个回答
0
投票

您看到的响应是使用 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/

© www.soinside.com 2019 - 2024. All rights reserved.