我为我的 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'是动作并且使用方法和动作,匹配正确的方法吗?我想我错过了一些东西。