Reputation: 8055
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}
);
Upvotes: 8
Views: 4721
Reputation: 4805
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.
Upvotes: 3