Yas*_*ser 7 asp.net-mvc asp.net-mvc-routing asp.net-mvc-4 asp.net-web-api
我在ASP.NET MVC 4中使用web api.
我有以下命名的控制器
之前我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 }
);
Run Code Online (Sandbox Code Playgroud)
请有人指导我这个.谢谢
tpe*_*zek 14
那么你的代码中有两个问题.您正在使用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 }
);
Run Code Online (Sandbox Code Playgroud)
现在,如果您希望您的解决方案更通用(当您有更多需要像这样修改的控制器时),您可以使用自定义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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以像这样注册您的HttpRoute:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
).RouteHandler = new CustomHttpControllerRouteHandler();
Run Code Online (Sandbox Code Playgroud)
这样,当您将Customer放入URL时,引擎会将其视为CustomerApi.
| 归档时间: |
|
| 查看次数: |
5193 次 |
| 最近记录: |