我有个控制器

   [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无法绑定值时毫无例外地执行进程。

08-18 19:37