ASP.NET MVC 2应用程序中的区域可以映射到子域吗?

myn*_*fey 19 asp.net subdomain asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas

有没有办法将ASP.NET MVC 2应用程序中的区域映射到子域,例如

movies.example.com/Theater/View/2

代替

example.com/Movies/Theater/View/2

其中{area ="Movies",controller ="Theatre",action ="View",id = 2}.

Eil*_*lon 11

区域与路由没有直接关系,因此您的问题变为"路由支持子域吗?"

不幸的是,答案是没有内置的支持.

然而,好消息是许多人尝试使用基于路由的自定义代码取得成功:

如果你弄清楚如何在没有区域的情况下路由子域,那么对区域进行处理应该不再困难.转到您的区域注册环境,并使用您在其中选择的任何技术.区域也只不过是方式组合在一起的控制器和视图 - 他们没有很多内在的含义ASP.NET MVC本身(他们做一点点,但不是很多).


Rob*_*olk 5

您可以使用IIS7 URL重写模块轻松地将域或子域映射到MVC2区域.以下是将子域映射到两个区域的两个简单规则.如果请求是针对实际文件(即CSS,JS或图像文件),我添加了一个不使用此规则的限制.

以下是web.config中的示例配置:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="SubA Area">
                <match url=".*" />
                <action type="Rewrite" url="/SubA/{R:0}" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="suba.mydomain.com" />
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                </conditions>
            </rule>
            <rule name="SubB Area">
                <match url=".*" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="subb.mydomain.com" />
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                </conditions>
                <action type="Rewrite" url="/SubB/{R:0}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

您必须更改以下规则才能使用您的特定用例.特别是如果您需要在根区域使用控制器.在这种情况下,只需添加条件或创建新规则.

下载IIS URL重写模块(必需):http: //learn.iis.net/page.aspx/460/using-the-url-rewrite-module/