ASP.NET网页API定制路由 [英] ASP.NET Web Api Routing Customization
问题描述
我有在其名称中的API后缀结尾的WebAPI控制器(用于例如:StudentsApiController,InstructorsApiController)。我这样做是为了方便地从控制器的WebAPI区分我的MVC控制器。我希望我的WebAPI路线类似于
I have WebApi controllers that end with the "Api" suffix in their names (For ex: StudentsApiController, InstructorsApiController). I do this to easily differentiate my MVC controllers from WebApi controllers. I want my WebApi routes to look similar to
的http://本地主机:50009 / API /生/ 5
并没有的http://本地主机: 50009 / API / studentsapi / 5
。
目前实现这一目标,我设置路由像
Currently to achieve this, I am setting up routes like
routes.MapHttpRoute(
name: "GetStudents",
routeTemplate: "api/students/{id}",
defaults: new { controller = "StudentsApi", id = RouteParameter.Optional });
routes.MapHttpRoute(
name: "GetInstructors",
routeTemplate: "api/instructors/{id}",
defaults: new { controller = "InstructorsApi", id = RouteParameter.Optional });
这是谈到了将很麻烦,因为我有添加路由在我的控制器的每个方法。我希望应该有一个简单的方法来设置路由模板,自动添加API后缀的控制器名称在处理路线。
This is turning out to be very cumbersome as I have to add a route for each method in my controllers. I am hoping there should be an easy way to setup route templates that automatically adds the "api" suffix the controller name while processing routes.
推荐答案
我认为你正在寻找的扩展点是控制器选择。您可以创建一个从DefaultHttpControllerSelector派生并覆盖GetControllerName剥离出来的API部分的类。然后,您可以对您的服务的配置服务注册该控制器选择。
I think the extensibility point you're looking for is the controller selector. You can create a class that derives from DefaultHttpControllerSelector and overrides the GetControllerName to strip out the "api" part. You can then register this controller selector on your service's configuration Services.
这篇关于ASP.NET网页API定制路由的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!