将枚举参数传递给 WebApi 方法

Posted

技术标签:

【中文标题】将枚举参数传递给 WebApi 方法【英文标题】:Pass Enum Parameter to WebApi method 【发布时间】:2019-07-23 07:10:54 【问题描述】:

试图将枚举类型值传递给 WebApi,但它接受除枚举整数以外的任何值。

我们可以限制只接受枚举值吗?

public class ValuesController : ApiController

    [HttpGet]
    [Route("api/getName/Gender")]
    public IEnumerable<string> Get(Gender gender)
    
        Gender g = gender;

        return new string[]  "value1", "value2" ;
    

枚举值

public enum Gender

    Male,
    FeMale

例如:

    http://localhost:58984/api/getName/1 - 解决给女性 http://localhost:58984/api/getName/6 - 它接受 6 但我想抛出一个异常。

【问题讨论】:

MVC4 WebAPI reject invalid enum values的可能重复 检查***.com/q/39789818/5236014 【参考方案1】:

您必须手动检查,ASP.NET MVC 不适合您:

Type enumType = gender.GetType();
bool isEnumValid = Enum.IsDefined(enumType, gender);
if (!isEnumValid) 
  throw new Exception("...");

除了抛出异常,您还可以在模型上使用验证器来检查枚举是否正确。

之所以通过参数传入无效的枚举,是因为枚举是整数,解释here。

【讨论】:

它已经是一个枚举,而不是一个字符串。为了使用 TryParse() 我们必须创建一个 gender.ToString() 并再次解析。那么为什么 TryParse 是更好的选择呢?那不是 Enum.TryParse() 吗? 我收回了,我没有意识到如果枚举无效,web api会将枚举转换为整数。 顺便说一句:它尝试了 Enum.TryParse() 但实际上不起作用,请参阅demo here。仍然可以解析无效数字。这似乎是answer 状态的正常行为。

以上是关于将枚举参数传递给 WebApi 方法的主要内容,如果未能解决你的问题,请参考以下文章

通过 javascript 将复杂参数传递给 Web API 服务

将 JSON 对象传递给 WebApi

java中,如何用POST方法将参数传递给第三方网站

将枚举类型作为参数传递给 GraphQL 查询 - Quarkus

将多个参数传递给 Web API GET 方法

我应该如何将多个参数传递给 ASP.Net Web API GET?