Asp.net mvc 2 高级ASP.NET MVC路由方案
我有一个ASP.NET MVC应用程序,具有以下部署要求: URL结构必须类似于: {controller}/{action}/ 我想我能做的是在MVC路由处理程序得到URL之前拦截它,删除[enterprise]/[community]部分,然后允许MVC继续处理,就像原始URL没有包含这两个段一样 原因如下: 应用程序向多个客户(企业)公开多个门户,企业中的每个社区都有自己的用户群。这种方案也可以通过在每个[community]目录中实际部署一个应用程序实例(二进制文件、内容、web.config)来实现,但出于后勤和性能方面的原因,我认为我们不想走这条路。所以我试图通过路由技巧来虚拟化它 如果您对如何实施该计划或其他解决方案有任何建议,我们将不胜感激Asp.net mvc 2 高级ASP.NET MVC路由方案,asp.net-mvc-2,asp.net-mvc-routing,web-deployment,asp.net-routing,Asp.net Mvc 2,Asp.net Mvc Routing,Web Deployment,Asp.net Routing,我有一个ASP.NET MVC应用程序,具有以下部署要求: URL结构必须类似于: {controller}/{action}/ 我想我能做的是在MVC路由处理程序得到URL之前拦截它,删除[enterprise]/[community]部分,然后允许MVC继续处理,就像原始URL没有包含这两个段一样 原因如下: 应用程序向多个客户(企业)公开多个门户,企业中的每个社区都有自己的用户群。这种方案也可以通过在每个[community]目录中实际部署一个应用程序实例(二进制文件、内容、web.con
我们使用的是IIS 7,如果这有什么不同的话。这里有一个使用IIS重写模块的可能解决方案。这可能不是最好的方法,但可能有效。MVC路由中是否有更简单/更好的选择?不确定。我自己才刚开始这么做 以“”为例 发生了什么:
<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>
注意:只是做得很快,还没有测试。您可以在默认路由之前使用以下路由
routes.MapRoute(
null,
"{enterprise}/{community}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后,您可以忽略动作方法中的{enterprise}和{community}参数。因此人们可以访问
http://server/app/MyCompany/FightingDogs/Home/Index
然后您想要提取MyCompany/FightingDogs,以便URL现在可以读取http://server/app/Home/Index
?(我想您将MyCompany/Fightingdocs的引用存储在会话或cookie中?)不完全是这样。我希望浏览器可见URL保持不变,但我不希望MVC控制器/模型/等必须了解“MyCompany/FightingDogs”部分。不使用路由,而是在登录时将当前用户的企业和社区存储在会话中是否更有意义?我可以想象,如果URL对每个用户组都是唯一的,那么在文档中包含URL是很困难的。@Ryan-我们在应用程序中没有(服务器端)会话状态,我不想为此添加它。文件不是问题。我一直在考虑将这些信息作为声明添加到安全令牌cookike中。他使用的是mvc,它内置了路由(如果你不知道的话),我意识到mvc内置了路由,但从我认为jlew想要的内容来看,我读到了,认为mvc路由可能无法做到这一点。然而,在阅读了jlew的新评论后,我的方法无法满足他的要求,因为它直接处理MVC路由。你知道,我曾认为不可能“忽略”这些元素(视图模型需要包含它们),但看起来你是对的。谢谢