Asp.net mvc ASP.NET MVC 4中Web Api中的路由
我正在使用ASP.NETMVC4的web api 我有以下命名控制器Asp.net mvc ASP.NET MVC 4中Web Api中的路由,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Asp.net Mvc Routing,我正在使用ASP.NETMVC4的web api 我有以下命名控制器 客户控制器:控制器 CustomerApicController:ApicController 早些时候,我的CustomerApiController名为customercontroller,因此要访问它,我只需输入以下url localhost/api/Customers 但是现在我必须将api控制器名称保留为CustomerApiController。我希望能够使用localhost/api/Customers实现相
- 客户控制器:控制器
- CustomerApicController:ApicController
CustomerApiController
名为customercontroller
,因此要访问它,我只需输入以下url
localhost/api/Customers
但是现在我必须将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 }
);
现在,如果您希望您的解决方案更通用(当您有更多需要这样修改的控制器时),您可以使用customHttpControllerOutehandler
来转换传入的控制器名称,这样您就可以保留默认路由
首先,您需要创建自定义的HttpControllerOutehandler:
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。您可以扩展并覆盖GetControllerName以应用自定义规则。默认实现只是从路由数据返回“controller”变量的值。自定义实现可以将此映射到其他值。请参阅。这已经过时了吗?无法在MapHttpRoute方法中使用url参数。