Asp.net-Mvc
ASP.NET MVC 4 中的 Web Api 中的路由
我正在使用帶有 ASP.NET MVC 4 的 web api。
我有以下命名控制器
- 客戶控制器:控制器
- 客戶ApiController:ApiController
早些時候我
CustomerApiController被命名CustomersController為訪問它,我只需輸入以下網址> > 本地主機/api/客戶 > > >
但現在我必須將 api 控制器名稱保留為
CustomerApiController. 我希望能夠使用localhost/api/Customers我必須進行的更改來使用相同的方法?我嘗試在
RouteConfig.cs文件中進行一些更改。我嘗試將以下內容添加到 RegisterRoutes 方法,但它們都不起作用。routes.MapHttpRoute( name: "API Default", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); routes.MapRoute( name: "Customers", url: "api/customer/", defaults: new { controller = "CustomerApi", action = "Get", id = UrlParameter.Optional } );請有人指導我。謝謝
好吧,您的程式碼中有兩個問題。您正在使用 MapRoute 而不是 MapHttpRoute。您還應該將更詳細的路線放在第一位,這樣它就不會被更通用的路線所吞噬:
routes.MapHttpRoute( name: "Customer", url: "api/Customer/{id}", defaults: new { controller = "CustomerApi", action = "Get", id = UrlParameter.Optional } ); routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );現在,如果您希望您的解決方案更通用(當您有更多需要像這樣修改的控制器時),您可以使用自定義
HttpControllerRouteHandler來轉換傳入的控制器名稱,這樣您就可以保持預設路由。首先,您需要創建自定義
HttpControllerRouteHandler:public class CustomHttpControllerRouteHandler : HttpControllerRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString() + "Api"; return base.GetHttpHandler(requestContext); } }現在您可以像這樣註冊您的 HttpRoute:
routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ).RouteHandler = new CustomHttpControllerRouteHandler();這樣,當您將Customer放入 URL 時,引擎會將其視為CustomerApi。