ASP.NET网页API定制路由 [英] ASP.NET Web Api Routing Customization

查看:158
本文介绍了ASP.NET网页API定制路由的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有在其名称中的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆