我有一个具有以下部署要求的ASP.NET MVC应用程序:
URL结构必须类似于:
操作{http://server/app/[enterprise]/[communinty]/}/{/}控制器...
我想我要做的是在MVC路由处理程序获得URL之前拦截它,删除企业/社区部分,然后允许MVC继续处理,就像原始URL没有包含这两个段一样。
原因如下:
应用程序向多个客户(企业)公开多个门户,企业内的每个社区都有自己的用户群体。这种方案也可以通过在每个社区目录中物理部署一个应用程序实例(二进制文件、内容、web.config)来实现,但出于后勤和性能方面的原因,我认为我们不想走这条路。所以我试着通过路由技巧来虚拟化它。
任何关于如何去这个计划的建议,或替代解决方案,将不胜感激。
我们使用的是IIS 7,如果这有什么不同的话。
发布于 2010-07-27 02:55:37
您可以在默认路由之前使用以下路由
routes.MapRoute(
null,
"{enterprise}/{community}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);然后,您可以忽略操作方法中的{企业}和{社区}参数。
发布于 2010-07-24 04:31:25
以下是使用IIS重写模块可能解决方案。这可能不是最好的方法,但它可能会奏效。在MVC路由中有没有更简单/更好的选项?不确定。我自己才刚刚开始这么做。
以"http://server.com/app/enterprise/community/controller/action/“为例。
会发生什么:
一旦安装了IIS重写模块,所有这些都将在web.config中:
<rewrite>
<rules>
<clear />
<rule name="Redirect to remove Offending String" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="server.com/app/enterprise/community*" />
<action type="Redirect" url="/{R:1}" />
<conditions logicalGrouping="MatchAll">
<add input="{SERVER_NAME}" pattern="*server.com*" />
</conditions>
</rule>
<rule name="Rewrite to get Original Content" enabled="true" patternSyntax="Wildcard" stopProcessing="false">
<match url="*" />
<conditions logicalGrouping="MatchAll">
<add input="{SERVER_NAME}" pattern="*server.com*" />
</conditions>
<action type="Rewrite" url="app/enterprise/community{R:1}" />
</rule>
</rules>
</rewrite>注意:只是快速完成了这一步,还没有测试过。
https://stackoverflow.com/questions/3321750
复制相似问题