简单的路由问题,可选不起作用

时间:2014-03-24 20:38:23

标签: asp.net asp.net-mvc asp.net-web-api

我正在尝试使用多个get操作创建一个查找控制器。 我的路由配置是:

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "LookupsApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional  });

我的查找控制器

[HttpGet]
public LookupsList GetAllStates()
{

}

[HttpGet]
public LookupsList GetAllSources()
{
//method
}

当我使用以下内容时,它只会给出错误声明"找到符合请求的多个操作"

http://localhost:51042/api/lookups/GetAllStates
or 
http://localhost:51042/api/lookups/GetAllSources

但是当我使用

http://localhost:51042/api/lookups/GetAllStates/1
or 
http://localhost:51042/api/lookups/GetAllSources/1

它会正常工作。

如何正确设置我的路线。

感谢。

1 个答案:

答案 0 :(得分:3)

我认为你的路线会发生冲突。例如:

http://localhost:51042/api/lookups/GetAllStates

将匹配第一条路线。

您应该改变路线的顺序:

EdSF更新:

config.Routes.MapHttpRoute(
    name: "LookupsApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new {id = RouteParameter.Optional }
);

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

其他有用的参考资料:

  1. Route order

  2. Route params