【发布时间】:2012-12-03 10:08:35
【问题描述】:
我有两个方法的 Web API 控制器 - 假设第一个方法返回纯项目列表,第二个返回分配给特定用户的所有项目。
public class ProjectController: ApiController
{
public IQueryable<Project> Get() { ... }
[HttpGet]
public IQueryable<Project> ForUser(int userId) { ... }
}
在这种情况下方法实现并不重要。
Web API 路由配置也进行了调整以支持自定义方法名称。
config.Routes.MapHttpRoute(
"DefaultApi",
"api/v1/{controller}/{id}",
new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
"DefaultApiWithAction",
"api/v1/{controller}/{action}");
它工作正常,我可以访问/api/v1/projects/ 和/api/v1/projects/forUser/ 端点,但似乎路由引擎太聪明了,所以它决定/api/v1/projects?userId=1 请求可能匹配ForUser(..) 方法(由于@ 987654327@ 参数名称,我猜)并忽略路由的{action} 部分。
有什么办法可以避免这种行为并要求在 URL 中明确指定操作部分?
【问题讨论】:
标签: c# asp.net-mvc asp.net-web-api