Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Strict enum query string parsing in WebApi

I have a controller action like this:

public Foo Get([FromUri] Filter[] filters){...}

With an Enum like so:

public enum Filter
{
   Yes,
   No,
   FileNotFound
}

When I make a call to my controller with the following request:

/api/things?filters=garbagevalue

Then the values passed to the controller is Filter.Yes (the default value). Is it possible to get webapi to reject, perhaps a BadRequest or other response code and/or exception, any request to a controller with an enum parameter where the enum parameter value is unknown? Alternatively, is it possible to filter out values from the query string parameters which do not match enum values?

I understand that it might be better to have a None value in the enum and detect that, but I'd like to avoid having to add that to all of my enums. Also, None would then be a valid value, which would have to be detected, and I wouldn't be able to give any feedback to the person making the request which query parameter was invalid.

Thanks!

like image 904
jonnii Avatar asked Feb 04 '14 19:02

jonnii


Video Answer


1 Answers

Use a nullable enum type:

public Foo Get([FromUri] Filter?[] filters){...}

The unknown/garbage values in the array will be null.

like image 172
Cary Avatar answered Sep 27 '22 21:09

Cary