首页 > 解决方案 > 自定义 IRouteConstraint:返回自定义响应而不是 404[NotFound]

问题描述

我想创建一个自定义 IRouteConstraint 来检查参数值。如果失败,我想返回 404[BadRequest]ProblemDetails作为正文。

像这样的东西;-)

public class CountryRouteConstraint : IRouteConstraint
{
    private readonly List<string> _countryCodes = new() { "AF", "AX", "AL", "DZ", "AS", "AD", "AO" /*...*/ };

    public bool Match(HttpContext context, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
    {
        values.TryGetValue(routeKey, out var value);

        var country = (value as string ?? string.Empty).ToUpper();
        // If a company is required: We assume a valid value as mandatory!
        if (_countryCodes.Contains(country))
            return true;

        return new ProblemDetails
        {
            Status = (int)HttpStatusCode.BadRequest,
            Title = $@"No valid country provided: ""{country}""",
            Instance = context?.Request.Path
        };
    }
}

我怎样才能做到这一点?

标签: c#asp.net-core

解决方案


推荐阅读