如何为路由参数错误指定类型转换错误消息? (C#, WebApi)
How to specify type cast error message for route param error? (C#, WebApi)
我有一个带有操作的 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."
]
}
}
如何指定此转换错误的错误消息?理想情况下,我会在 class 定义中用属性指定它:
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; }
}
您可以使用 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()));
}
我有一个带有操作的 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."
]
}
}
如何指定此转换错误的错误消息?理想情况下,我会在 class 定义中用属性指定它:
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; }
}
您可以使用 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()));
}