Routing WebApi可选参数-是否必需?

Routing WebApi可选参数-是否必需?,routing,asp.net-web-api,Routing,Asp.net Web Api,我有一个web api控制器(TasksController),其get方法如下: public IEnumerable<TimeUnitModel> Get(DateTime startDate, DateTime endDate, string projectCode = "") 返回正确的结果 如果我打电话 /api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15&projectCode= 然后我得

我有一个web api控制器(TasksController),其get方法如下:

public IEnumerable<TimeUnitModel> Get(DateTime startDate, DateTime endDate, string projectCode = "")
返回正确的结果

如果我打电话

/api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15&projectCode=
然后我得到:

{"projectCode.String":"A value is required but was not present in the request."}
知道为什么会这样吗? 谢谢

编辑: 以下是我在路由配置中的内容:

config.Routes.MapHttpRoute(
            name: "tasks_get",
            routeTemplate: "api/tasks",
            defaults: new { controller = "tasks", projectCode = RouteParameter.Optional}
        );
您的第一个电话:
/api/tasks?起始日期=2012%2F12%2F08&endDate=2012%2F12%2F15

是使用可选参数调用方法的方式(即,该参数是可选的,因此您没有指定它)。在查询字符串中指定“&projectCode=”时,您指定的是参数,并且指定为null。由于字符串可以为null,因此api假定您希望发送null值。如果希望该方法使用空字符串运行,只需按以前的方式调用它,而不必发送该参数。

@sirrocco我以前见过类似的行为,关于这个问题,P.s.projectCode在查询字符串中不是路径,因此不是路由参数-因此您可以从配置中删除可选参数位。谢谢标记。出于好奇,我还将查看该框架。是的,关于它不是一个路由参数,您是正确的,但我必须尝试一下:)。
config.Routes.MapHttpRoute(
            name: "tasks_get",
            routeTemplate: "api/tasks",
            defaults: new { controller = "tasks", projectCode = RouteParameter.Optional}
        );