代码之家  ›  专栏  ›  技术社区  ›  jlew

高级ASP.NET MVC路由方案

  •  0
  • jlew  · 技术社区  · 15 年前

    我有一个具有以下部署要求的ASP.NET MVC应用程序:

    URL结构必须类似于:

    http://server/app/[enterprise]/[communinty]/

    我想我能做的是在MVC路由处理程序得到它之前拦截URL,删除[enterprise]/[community]部分,然后允许MVC继续处理,就像原始URL没有包含这两个段一样。

    原因如下:

    应用程序向多个客户(企业)公开多个门户,企业中的每个社区都有自己的用户群。这种方案也可以通过在每个[community]目录中实际部署一个应用程序实例(binaries、content、web.config)来实现,但出于后勤和性能方面的原因,我认为我们不想走这条路。所以我尝试通过路由技巧来虚拟化它。

    如有任何关于如何实施这项计划或其他解决方案的建议,我们将不胜感激。

    我们在iis7上,如果这有什么区别的话。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Caline    15 年前

    routes.MapRoute(
        null,
        "{enterprise}/{community}/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    

    然后可以忽略动作方法中的{enterprise}和{community}参数。

        2
  •  0
  •   mcnarya    15 年前

    下面是一个可能的解决方案与IIS重写模块。这也许不是最好的方法,但可能有效。MVC路由中有更简单/更好的选择吗?不确定。我自己才开始这么做。

    使用“ http://server.com/app/enterprise/community/controller/action/ “举个例子。

    发生了什么:

    1. 网址: http://server.com/controller/action/
    2. 将用户重定向到新URL。用户的 http://server.com/controller/action/
    3. 内容。用户浏览器显示: ; 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>
    

    注意:只是做得很快,还没有测试。