【问题标题】:How to specify type cast error message for route param error? (C#, WebApi)如何为路由参数错误指定类型转换错误消息? (C#,WebAPI)
【发布时间】:2021-02-10 21:13:52
【问题描述】:

我有一个带有动作的 WebApi 控制器。路由参数之一被强制转换为枚举。但是,如果调用者指定的值无效,则会返回默认错误消息以及 BadRequest HTTP 状态。我的枚举有两个有效值:person/org。例如,如果我传入一个“p”,这就是返回的内容:

{
    type: "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    title: "One or more validation errors occurred.",
    status: 400,
    traceId: "|cc923491-4f15cb34f96ad64a.",
    errors: {
        Type: [
            "The value 'p' is not valid for Type."
        ]
    }
}

如何指定此转换错误的错误消息?理想情况下,我会在类定义中用一个属性来指定它:

public class Entity
{
    // How do I return this as the error message for an incorrect cast of EntityType?
    // "entityType must be either 'person' or 'org'."
 
    [Required]
    public EntityType Type { get; set; }
    [Required]
    [Range(1, long.MaxValue, ErrorMessage = "Please specify a valid entity id. Value must be an integer greater than 0.")]
    public long Id { get; set; }
}

【问题讨论】:

    标签: c# asp.net-web-api2 data-annotations asp.net-core-3.1


    【解决方案1】:

    您可以使用EnumDataType 属性,但它仅在您指定一个与任何 EntityType 枚举值都不匹配的整数值时才有效。

    [EnumDataType(typeof(EntityType ), ErrorMessage = "Please specify a valid EntityType.")]
    

    您可以做的另一件事是创建自定义ResultFilterAttribute 并处理错误:

    public class CustomFilter : ResultFilterAttribute
    {
        public override void OnResultExecuted(ResultExecutedContext context)
        {
            // your code
            base.OnResultExecuted(context);
        }
    }
    

    注意:您必须在 API 的 FilterCollection 中注册过滤器

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc(options => options.Filters.Add(new CustomFilter()));
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-20
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多