我有个控制器
[HttpGet]
[RoutePrefix("api/products/{productId}")]
public HttpResponseMessage Products(int productId,TypeEnum ptype=TypeEnum.Clothes)
{
if(!Enum.IsDefined(typeOf(TypeEnum),ptype))
//throw bad request exception
else
//continue processing
}
髓鞘被宣布为
public TypeEnum
{
Clothes,
Toys,
Electronics
}
当前,如果传递了某个垃圾值,则会将其转换为默认值。
我想做的是,如果我将控制器称为api/products/1,那么应该为ptype分配默认值,即衣服。如果我将控制器称为api/products/1?ptype=somegarbagevalue则控制器应引发错误请求异常。我怎样才能做到这一点呢?
最佳答案
您必须使用string
并使用TryParse()
将字符串转换为Enum
值。
public HttpResponseMessage Products(int productId,string ptype="Clothes")
{
TypeEnum category = TypeEnum.Clothes;
if(!Enum.TryParse(ptype, true, out category))
//throw bad request exception if you want. but it is fine to pass-through as default Cloathes value.
else
//continue processing
}
它看起来可能很幼稚,但是这种方法的好处是允许
ptype
参数到任何字符串,并且在ptype
无法绑定值时毫无例外地执行进程。