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}
);
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With