我有带有 2 种方法的 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(..)
方法匹配(我猜是由于userId
参数名称)并忽略{action}
了路由的一部分。
有什么方法可以避免这种行为并要求在 URL 中明确指定操作部分?