在Controllers目录中,我有两个子目录-FeatureA和FeatureB

FeaturesA
      Service1Controller
      Service2Controller
      Service3Controller

FeaturesB
      Service4Controller
      Service5Controller
      Service6Controller


我想添加两条路由,以便可以通过以下URL访问这些服务-

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/Service1localhost/api/FeaturesB/Service1甚至localhost/api/Service1访问Service1

如何设置我的路由以仅允许从localhost/api/FeaturesA/Service1访问Service1,这同样适用于所有其他控制器,即它们只能从与其控制器子目录匹配的URL进行访问。

最佳答案

这似乎与引入routing constraints所要完成的工作差不多。如果情况足够简单,则可以使用内置类型来添加正则表达式以与控制器名称匹配。但是对于更复杂的情况,您可以自己编写。

Pinal Bhatt有一个不错的博客文章,其中包含指向该主题的大量文章的链接:http://blog.pbdesk.com/2012/07/route-constraints-with-aspnet-mvc.html

09-12 18:41