Web Api路由过滤器到子目录

本文关键字:子目录 过滤器 路由 Api Web | 更新日期: 2023-09-27 18:04:31

在我的Controllers目录中我有两个子目录- FeaturesA和FeaturesB

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

我如何设置我的路由只允许Service1从localhost/api/FeaturesA/Service1访问,同样适用于所有其他控制器,即他们应该只能从一个url匹配他们的控制器子目录访问。

Web Api路由过滤器到子目录

这似乎正是引入路由约束的目的。如果情况足够简单,可以使用内置类型添加正则表达式来匹配控制器名称。但是对于更复杂的情况,您可以自己编写。

Pinal Bhatt有一篇很好的博客文章,里面有很多关于这个主题的文章的链接:http://blog.pbdesk.com/2012/07/route-constraints-with-aspnet-mvc.html