Asp.net web api 为路由指定有效的控制器

Asp.net web api 为路由指定有效的控制器,asp.net-web-api,asp.net-web-api-routing,Asp.net Web Api,Asp.net Web Api Routing,我必须为我们的系统提供两个Web API控制器PublicController和PrivateController。它们应具有以下路线: /public/{controller}/{id} 及 /private/{controller}/{id} 在防火墙上,对/private的所有请求都被阻止,并且只能从网络内部获得。但按照惯例,我的两个控制器都可用于两条路由,因此我可以使用url/public/PrivateController/1请求PrivateController(该属性应仅在/pri

我必须为我们的系统提供两个Web API控制器
PublicController
PrivateController
。它们应具有以下路线:

/public/{controller}/{id}

/private/{controller}/{id}

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

是否有方法为路由指定有效的控制器,以便
PrivateController
仅可用于专用路由?或者是否有其他实践来满足这一要求


感谢您的回复。

您可以使用
约束
参数以非常简单的正则表达式在最简单的情况下提供对控制器名称的限制:

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的控制器,“公共”路由只接受名为public的控制器。如果您有多个公共和私有控制器,您可以轻松地扩展正则表达式以匹配它们


如果正则表达式不足以满足您的需要,您可以通过实现
irouteconsttraint
接口来创建自定义路由contaraint。您可以找到一个示例。

您可以使用
约束
参数,在最简单的情况下,通过一个非常简单的正则表达式提供对控制器名称的限制:

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的控制器,“公共”路由只接受名为public的控制器。如果您有多个公共和私有控制器,您可以轻松地扩展正则表达式以匹配它们


如果正则表达式不足以满足您的需要,您可以通过实现
irouteconsttraint
接口来创建自定义路由contaraint。你可以找到一个例子。

你能给我看一下你的路线目前的样子吗?我实际上没有任何代码。我在问题中提到的代码是一些示例代码来解释我的问题。你能展示一下你的路线目前的样子吗?我实际上没有任何代码。我在问题中提到的代码是一些示例代码来解释我的问题。谢谢,这正是我需要的。谢谢,这正是我需要的。