Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WebApi optional parameter - is required?

I have a web api controller (TasksController) with a get method like :

public IEnumerable<TimeUnitModel> Get(DateTime startDate, DateTime endDate, string projectCode = "")

If I call

/api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15

the correct result is returned.

If I call

/api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15&projectCode=

then I get :

{"projectCode.String":"A value is required but was not present in the request."}

Any idea why this happens ? Thanks.

Edit: Here's what I have in the route config :

config.Routes.MapHttpRoute(
            name: "tasks_get",
            routeTemplate: "api/tasks",
            defaults: new { controller = "tasks", projectCode = RouteParameter.Optional}
        );
like image 957
sirrocco Avatar asked Dec 15 '12 16:12

sirrocco


Video Answer


1 Answers

Your first call: /api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15 is how you call the method with an optional parameter (i.e. the parameter is optional, so you are not specifying it). When you specify "&projectCode=" in the query string, you are specifying the parameter, and you're specifying it as null. Since strings are nullable, the api assumes you want to send in a null value. If you want the method to run with an empty string, just call it the way you were doing before without sending in that parameter at all.

like image 194
codeMonkey Avatar answered Sep 28 '22 07:09

codeMonkey