2

在我的 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/Service1访问Service1localhost/api/FeaturesB/Service1localhost/api/Service1

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

4

1 回答 1

3

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

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

于 2013-03-19T13:39:05.737 回答