在我的Controllers目录中,我有两个子目录 - FeaturesA和FeaturesB
FeaturesA
Service1Controller
Service2Controller
Service3Controller
FeaturesB
Service4Controller
Service5Controller
Service6Controller
我想添加两条路线,以便通过以下网址访问这些服务 -
localhost/api/FeaturesA/....
和
localhost/api/FeaturesB/....
我有以下路线设置
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "FeaturesA",
routeTemplate: "api/FeaturesA/{controller}/{id}",
defaults: new { id = RouteParameter.Optional});
config.Routes.MapHttpRoute(
name: "FeaturesB",
routeTemplate: "api/FeaturesB/{controller}/{id}",
defaults: new { id = RouteParameter.Optional});
但我可以从localhost/api/FeaturesA/Service1
和localhost/api/FeaturesB/Service1
甚至localhost/api/Service1
如何设置路由以仅允许从localhost/api/FeaturesA/Service1
访问Service1,这同样适用于所有其他控制器,即它们只能从与其控制器子目录匹配的URL访问。
答案 0 :(得分:3)
这看起来几乎就是routing constraints要完成的内容。如果你有一个足够简单的案例,你可以使用内置类型来添加正则表达式以匹配控制器名称。但对于更复杂的情况,你可以自己编写。
Pinal Bhatt有一篇不错的博客文章,其中包含有关此主题的大量文章的链接:http://blog.pbdesk.com/2012/07/route-constraints-with-aspnet-mvc.html