C# 将枚举参数传递给WebApi方法

C# 将枚举参数传递给WebApi方法,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,试图将枚举类型值传递给WebApi,但它正在接受枚举整数以外的任何值 我们可以限制只接受枚举值吗 public class ValuesController : ApiController { [HttpGet] [Route("api/getName/{Gender}")] public IEnumerable<string> Get(Gender gender) { Gender g = gender; retur

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

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

public class ValuesController : ApiController
{
    [HttpGet]
    [Route("api/getName/{Gender}")]
    public IEnumerable<string> Get(Gender gender)
    {
        Gender g = gender;

        return new string[] { "value1", "value2" };
    }
}
例:

  • -解决这一问题
  • -它接受6,但我想抛出一个异常

  • 您必须手动检查此项,ASP.NET MVC不会为您更改此项:

    Type enumType = gender.GetType();
    bool isEnumValid = Enum.IsDefined(enumType, gender);
    if (!isEnumValid) {
      throw new Exception("...");
    }
    
    您也可以在模型上使用验证器来检查枚举是否正确,而不是抛出异常


    通过参数传入无效枚举的原因是,因为枚举是整数,已解释。

    可能重复检查它已经是枚举,而不是字符串。为了使用TryParse(),我们必须生成一个gender.ToString()并再次解析。那么为什么特里帕斯是更好的选择呢?那不是Enum.TryParse()吗?我收回它,我没有意识到如果Enum无效,web api会将其转换为整数。顺便说一下:它尝试了Enum.TryParse(),但实际上不起作用,请参阅。仍然可以分析无效的数字。这似乎是正常的行为。
    Type enumType = gender.GetType();
    bool isEnumValid = Enum.IsDefined(enumType, gender);
    if (!isEnumValid) {
      throw new Exception("...");
    }