WebApi optional parameter - is required?

2019-06-16 11:23发布

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}
        );

1条回答
乱世女痞
2楼-- · 2019-06-16 11:47

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.

查看更多
登录 后发表回答