1

我必须为我们的系统提供两个 Web APIPublicController控制器PrivateController。这些应该有以下路线:

/public/{controller}/{id}

/private/{controller}/{id}

在防火墙上,所有请求/private都被阻止,并且只能从网络内部获得。但按照惯例,我的两个控制器都可用于两条路由,因此我可以使用 url请求PrivateController(它应该只在 下可用) 。/private/public/PrivateController/1

有没有办法为路由指定有效的控制器,以便PrivateController仅可用于私有路由?还是有一些其他的做法来满足这个要求?

感谢您的回复。

4

1 回答 1

1

您可以使用该constraints参数在最简单的情况下通过一个非常简单的正则表达式来限制控制器名称:

config.Routes.MapHttpRoute(
    name: "private",
    routeTemplate: "api/private/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: new { controller = @"private" }
);

config.Routes.MapHttpRoute(
    name: "public",
    routeTemplate: "api/public/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: new { controller = @"public" }
);

所以现在“private”路由只接受名为Private的控制器,而“public”路由只接受名为Public的控制器。如果您有多个公共和私有控制器,您可以轻松扩展正则表达式以匹配它们。

如果正则表达式不足以满足您的需求,您可以通过实现IRouteConstraint接口来创建自定义路由约束。您可以在本文中找到一个示例植入。

于 2013-03-11T09:06:47.073 回答