将枚举参数传递给 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以上是关于将枚举参数传递给 WebApi 方法的主要内容,如果未能解决你的问题,请参考以下文章
通过 javascript 将复杂参数传递给 Web API 服务