繁体   English   中英

MaxLength 装饰器不适用于 int.MaxValue

[英]MaxLength decorator is not working with int.MaxValue

鉴于这个基本的 GET 方法:

public Foo Get([FromQuery][MaxLength(int.MaxValue, ErrorMessage ="Custom error message")] int input)
{
   // DO THINGS
}

当我实际发送一个大于int.MaxValue的值时, MaxLength装饰器不起作用:

https://apiurl/foo?input=9999999999999999999

我得到一个System.OverflowException: 'Value was either too large or too small for an Int32.' ,在到达 MaxLength 验证器之前,在System.Private.CoreLib

是否有一种简单的方法来处理此错误并实际返回我的自定义错误消息,或者我是否必须实现自定义 ModelBinder?

创建自定义属性:

public class CustomNameAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext context)
    {
        if (context.Result is BadRequestObjectResult badRequestObjectResult)
            if (badRequestObjectResult.Value is ValidationProblemDetails)
            {
                context.Result = new BadRequestObjectResult("Error message");
            }
        base.OnResultExecuting(context);
    }
}

然后将其添加到您的方法中:

[CustomName]
public Foo Get([FromQuery]int input)
{
   // DO THINGS
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM