的Web API路由{控制器}/{行动}/{ID} VS默认路由
问题描述:
我想创建一个控制器,可以响应这些请求:的Web API路由{控制器}/{行动}/{ID} VS默认路由
- API /用户/ 123
- API /用户/ UsersOfCompany?ID = 123 &的PageIndex = 0 &的pageSize = 20
- API /用户/ AllowedCompanies?ID = 123 &的PageIndex = 0 &的pageSize = 10
这是我的实际代码。
用户控制器
public class UserController : ApiController
{
[HttpGet]
public IHttpActionResult Get(int id)
{
//... implementation...
}
[HttpGet]
[ActionName("UsersOfCompany")]
public IHttpActionResult UsersOfCompany(int id, [FromUri] Paging paging)
{
//... implementation...
}
[HttpGet]
[ActionName("AllowedCompanies")]
public IHttpActionResult AllowedCompanies(int id, [FromUri] Paging paging)
{
//... implementation...
}
}
WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Servizi e configurazione dell'API Web
// Route dell'API Web
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ApiWithActionName",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.MessageHandlers.Add(new LanguageMessageHandler());
}
}
RouteConfig
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
基于样品热曲EST以上,我想路由的工作是这样的:
Get(int id)
UsersOfCompany(int id, [FromUri] Paging paging)
AllowedCompanies(int id, [FromUri] Paging paging)
但是,现在,我只能打电话过去2个请求(UsersOfCompany,AllowedCompanies)。 当我打电话API /用户/ 123我得到这个错误:
"Could not find an HTTP resource that matches the request's URL 'Service/api/User/123'.", "Unable to find an action on the 'User' controller with name '42887'."
我已经试图反转路线登记的先后顺序,但我otained相反的行为,使api/User/123
电话工程和其他两只时却。
问题在哪里?
答
您的错误消息清楚地表明WebApi试图匹配Service/api/User/123
到第一个模式:api/{controller}/{action}/{id}
。
你可以试着改变注册的顺序在WebApiConfig
或显式地指定路线:
[Route("api/User/{id:int}")]
[HttpGet]
public IHttpActionResult Get(int id)
{
//... implementation...
}
什么,你问我们找到问题?是否有错误讯息?如果是这样,它发生在何时何地? – NightOwl888
对不起...更新了这个问题! :-) –