C# Web api路由-无法访问默认路由?

C# Web api路由-无法访问默认路由?,c#,asp.net-web-api,C#,Asp.net Web Api,我希望在我的web api中使用以下路由: /api/week/2013/08/29通过更改您的日期时间?week参数的默认值为空。您的两条路线都在运行: [WeekFilter] public IEnumerable<Week> Get(DateTime? week = null) { return null; } [WeekFilter] public IEnumerable Get(DateTime?week=null) { 返回null; } 使用api/wee

我希望在我的web api中使用以下路由:


/api/week/2013/08/29通过更改您的
日期时间?week
参数的默认值为空。您的两条路线都在运行:

[WeekFilter] 
public IEnumerable<Week> Get(DateTime? week = null)
{
    return null;
}
[WeekFilter]
public IEnumerable Get(DateTime?week=null)
{
返回null;
}
使用
api/week
调用控制器时,操作方法上的week参数为
null
。如果年和月为空,您可以通过修改
周过滤器
以初始化周来更改此设置

如果你用
/api/week/2013/8/13
调用它,一切都按预期进行。

我发现了我的错误

在我的全球asax中,我有:

   FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
   RouteConfig.RegisterRoutes(RouteTable.Routes);
   WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration);
   BundleConfig.RegisterBundles(BundleTable.Bundles);
但显然,web Api路由的位置很重要,我将其更改为

   WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration);
   FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
   RouteConfig.RegisterRoutes(RouteTable.Routes);       
   BundleConfig.RegisterBundles(BundleTable.Bundles);

现在它工作了

你犯了什么样的错误?模棱两可的匹配?404当我尝试/api/或/api/week/,/api/week/2013/08/29时,会给我正确的结果,你的/api/week/2013/08/29是否有效?是的,它会给我正确的结果,包括属性和操作(尽管这只是调用我的querycommand)
[WeekFilter]
public IEnumerable<Week> Get(DateTime? week = null)
{
    return HandlerLocator.GetQueryHandler<IGetWeeksDataHandler>().Execute(week);
}
[WeekFilter] 
public IEnumerable<Week> Get(DateTime? week = null)
{
    return null;
}
   FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
   RouteConfig.RegisterRoutes(RouteTable.Routes);
   WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration);
   BundleConfig.RegisterBundles(BundleTable.Bundles);
   WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration);
   FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
   RouteConfig.RegisterRoutes(RouteTable.Routes);       
   BundleConfig.RegisterBundles(BundleTable.Bundles);