0

我会尽量简单地描述我的问题。我有几个在运行时动态加载的控制器。这些控制器为不同的合作伙伴托管多个 Web api。我想要实现的是在访问控制器之前在 URL 中有一个前缀。换句话说,我有Partner1 和Partner2。他们都有一些控制器,例如

伙伴 1:服务 1 控制器,服务 2 控制器 2。Partner2:Api1Controller、Api2Controller等

现在我想实现以下目标。我希望 partner1 的控制器只能通过 URL 中的 Partner1 前缀访问,例如http://somehost.com/Partner1/Service1,但我不希望 Api1Controller 可以从http://somehost.com/Partner1/访问Api1,但它应该可以从http://somehost.com/Partner2/Api1访问。

有什么方法可以实现我的目标吗?

谢谢

4

2 回答 2

1

一个不优雅的解决方案可能是使用 2 个单独的路由映射:

routes.MapRoute(
    "partner1", 
    "partner1/{controller}/{action}",
    new { contoller =  Service1Controller, action = "Index" },  
    new { contoller = @"(Service1Controller)|(Service2Controller)"}
);

routes.MapRoute(
    "partner2", 
    "partner2/{controller}/{action}",
    new { controller = Api1Controller, action = "Index" },   
    new { contoller = @"(Api1Controller)|(Api2Controller)"}
);  

MapRoute 的第 4 个参数将约束定义为正则表达式

于 2012-10-03T22:09:27.640 回答
0

您可以创建一个自定义 ActionFilter 来查看请求和用户并确定路由是否有效。如果不是,那么您可以返回一些 ActionResult 重定向或向用户返回错误。

于 2012-10-03T21:15:26.243 回答