繁体   English   中英

ASP.NET Core MVC:可选的枚举参数验证

[英]ASP.NET Core MVC : optional enum param validation

我有一个 ASP.NET Core Web API 控制器,它采用一个选项枚举参数:

public enum MyEnum 
{
    Value1,
    Value2
}

[ApiController]
public class MyController: ControllerBase
{
    [HttpGet('/{e}/get')]
    public async Task<ActionResult> GetSomething([FromQuery] MyEnum? e = null)
    {
    }
}

我对默认行为的期望是这样的:

  1. 如果没有提供参数: e = null
  2. 如果提供了正确的枚举值(例如?e=Value1 ): e 用枚举值初始化
  3. 如果提供了不正确的枚举(例如?e=Magic ):错误请求

最终,#3 不会发生。 是否有内置的枚举验证来实现这一点,或者有什么方法可以在不向管道添加任何额外过滤器的情况下验证模型?

我试图实现ValidationAttribute ,但它看起来与动作参数验证无关

public class EnumParamAttribute : ValidationAttribute
{
    public override bool IsValid(object? value)
    {
       return false;
    }
}

不会调用应用于操作参数的此属性

[HttpGet('/{e}/get')]
public async Task<ActionResult> GetSomething([FromQuery, EnumParam] MyEnum? e = null)
{
}

同时RangeAttribute被正确调用,因此数据被验证

访问docs.microsoft.com尝试在控制器内使用IsDefined

[HttpGet('/{e}/get')]
public async Task<ActionResult> GetSomething([FromQuery] MyEnum? e = null)
{
    if (!Enum.IsDefined(typeof(MyEnum), e))
        return BadRequest($"The value {e} is not valid");
}

暂无
暂无

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

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