【发布时间】:2013-03-20 05:45:12
【问题描述】:
我为我的 web api 服务设置了以下默认路由...
config.Routes.MapHttpRoute(
name: "DefaultControllerWithIdAndAction",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new {action = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "DefaultPost",
routeTemplate: "api/{controller}",
defaults: new { action = "Post" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) }
);
config.Routes.MapHttpRoute(
name: "DefaultGetWithId",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
config.Routes.MapHttpRoute(
name: "DefaultPutWithId",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Put" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Put) }
);
config.Routes.MapHttpRoute(
name: "DefaultDeleteWithId",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Delete" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Delete) }
);
config.Routes.MapHttpRoute(
name: "DefaultControllerWithAction",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = RouteParameter.Optional }
);
我在“UsersController”下有以下服务:
public UserDto Get(string id){}
[HttpGet]
public UserDto ByEmail(string email)
[HttpGet]
public bool IsEmailUnique(string email)
问题是,当我尝试点击这三个服务中的任何一个时,我收到了“发现多个操作”错误。请求应该从所有路由中选择最后一个路由并执行请求。
如果我要执行'/api/users/byemail?email=blah@blah.com',不应该知道'ByEmail'是动作并且使用方法和动作,匹配正确的方法吗?我想我错过了什么。
【问题讨论】:
标签: asp.net-mvc-4 asp.net-web-api asp.net-mvc-routing asp.net-web-api-routing