2011-11-21 84 views
2

有沒有什麼辦法可以在ASP.NET MVC中使用子域名?ASP.NET子域的URL重寫和URL生成

我看到了許多不同的方法,但他們都不是完全與ASP.NET MVC架構的工作:

一)使用RouteConstraint(如MVC 3 Subdomain Routing) - 它有助於asp.net的MVC選擇合適的路線,但不不解決URL生成問題

b)定義自定義路由類:http://blog.tonywilliams.me.uk/asp-net-mvc-2-routing-subdomains-to-areashttp://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx,均與URL生成問題(第二個提供HtmlHelper.ActioLink擴展爲一個解決方案,但是這是需要什麼只有小部分 - 網址是使用Html.BeginForm,Ajax.BeginForm,Url.Action等構造 - 對現有代碼庫進行太多更改+沒有人會保證,t帽子新手不會忘記使用正確的擴展名+不知道這是否適用於T4MVC)。

c)使用URL重寫規則:

<rules> 
    <rule name="SubDomain" stopProcessing="false"> 
     <match url="(.*)" /> 
     <conditions> 
     <add input="{HTTP_HOST}" pattern="^(?!www)(\w+)\.domain\.com$" /> 
     </conditions> 
     <action type="Rewrite" url="{C:1}/{R:1}" /> 
    </rule> 
    </rules> 

所以,如果用戶請求admin.domain.com,asp.net的MVC明白domain.com/admin。 到目前爲止好,問題是這個(我實際使用T4MVC,但這裏是沒有它的例子,不是嚇唬那些誰從未使用過它):

<a href="@Url.Action("Index", "Home")"> 

這一點,根據我的路由應該去到domain.com,但它給出的例外「不能使用領先..退出頂部目錄以上」。

我想這是因爲UrlAction嘗試使用當前url(這是重寫後的domain.com/admin)構造url並導致失敗。此外,我認爲這只是一種方式 - 只是爲了找到正確的區域/控制器/操作,而不是爲了創建正確的URL。

所以問題是,有人做過這兩種方式(我的意思是路由到正確的區域/控制器/行動和使用標準助手,如HtmlHelper,UrlHelper生成網址)?

+0

寫代碼,你已經解決了這個問題?因爲我有同樣的東西。 – cryss

+0

不,只要使用子域名只是爲了方便,沒有嚴格的要求,我決定不使用它們。 – Giedrius

回答

0

1您需要進行DNS設置。在Global.asax中下面

public class SubdomainRoute : Route 
{ 
    public SubdomainRoute(string url, object defaults) 
     : base(url, new RouteValueDictionary(defaults), new MvcRouteHandler()) 
    { } 

    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     var rd = base.GetRouteData(httpContext); 
     var tokens = httpContext.Request.Url.Host.Split('.'); 
     if (tokens.Length > 1) 
     { 
      rd.Values["username"] = tokens[0]; 

     } 
     return rd; 
    } 
}