19

böyleCan Bir ASP.NET MVC 2 uygulama alanındaki alanlar bir alt etki alanına eşleyebilir mi?

movies.example.com/Theater/View/2 yerine example.com/Movies/Theater/View/2

{bölge = "Filmler"

ait

olarak alt alanlarına bir ASP.NET MVC 2 uygulama içinde Alanları eşlemek için bir yol var mı, controller = "Theatre", action = "Görüntüle", id = 2}.

+0

@mynameiscoffey, bunu başardınız mı? Tam olarak aynı görevim var. Yanıtı daha iyi açıklamak için –

cevap

11

Alanlar doğrudan yönlendirme ile ilgili değildir, bu nedenle sorunuz "destek alt etki alanlarını yönlendiriyor mu?" Bunun cevabı maalesef bunun için yerleşik bir desteğin olmamasıdır.

Ancak, iyi haber birçok kişi çalıştı ve yönlendirme üstünde inşa özel kod başarıyı yakalayan olmasıdır:

Alt alanları herhangi bir alan olmaksızın nasıl yönlendirileceğini anlarsanız, o zaman bunu alanlarla yapmak daha zor olmamalıdır. Bölgenizin kayıt bağlamına gidin ve içinde hangi tekniği kullanırsanız kullanın. Alanlar, denetleyicileri ve görünümleri bir arada gruplandırmanın bir yoludur - ASP.NET MVC'nin kendisinde çok fazla anlam taşımazlar (biraz yaparlar, ancak çok fazla değil).

+1

+1. –

5

Etki alanlarını veya alt etki alanlarını, IIS7 URL Yeniden Yazma modülünü kullanarak kolayca bir MVC2 Alanına eşleyebilirsiniz. Alt alan adlarını iki Alana eşleyen iki basit kural. İstek, gerçek bir dosyaya (ör. CSS, JS veya resim dosyaları) yönelikse, bu kuralı kullanmamak için bir kısıtlama ekledim. Eğer belirli kullanma dosyası ile çalışmak için aşağıdaki kuralları değiştirmek gerekecek

<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> 

: Burada

sağ web.config gider örnek yapılandırma olduğunu. Özellikle kullanmanız gereken kök alanda denetleyiciler varsa. Bu durumda, sadece bir koşul ekleyin veya yeni bir kural oluşturun. umarım bazı yararlı olacaktır, benim blog öyle, http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/

3

Ben aynı sorunu üzerine vurdu ve ben benim için çalışan bir çözüm geliştirdik:

IIS URL Rewrite modülünü (gerekli) indirin sana.

Alkış Tony

1

diğer iş parçacığı üzerinde belirtilen çözümlerin çok güvenilir ve çok karmaşık çok hızlı alma şeyler buldum. ASP.Net MVC'nin bu tür bir yönlendirmeyi yapmak için Route alt sınıfa yönlendirilmesini istemişsiniz gibi görünüyor, ama hiçbir zaman benim için işe yaramadı. Ad alanıyla eşleştirmek için hiçbir zaman bir alan elde edemedim, bu yüzden "belirsiz denetleyici" istisnaları ile yaralandım (her iki adresteki bir ev denetleyicim olduğundan).

Sonuçta alt etki alanlarını ad alanlarına işaret etmek için bir kısıtlama kullandım.

Güzergahım neye benziyor. Bu yolun "api" için olduğuna dikkat edin. alt alan: Burada

 context.MapRoute(
      "Api_Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      new { controller = new SubdomainRouteConstraint("api.") }, 
      new[] { "BendyTree.CloudSpark.Areas.Api.Controllers" } 
      ); 

yukarıda referans "SubdomainRouteConstraint" sınıfı var:

public class SubdomainRouteConstraint : IRouteConstraint 
{ 
    private readonly string SubdomainWithDot; 

    public SubdomainRouteConstraint(string subdomainWithDot) 
    { 
     SubdomainWithDot = subdomainWithDot; 
    } 

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     return new Regex("^https?://" + SubdomainWithDot).IsMatch(httpContext.Request.Url.AbsoluteUri); 
    } 
} 

Açıkçası oldukça kesmek, ama o bitti ne kadar basit gerçekten mutluyum.

Kolayca dinamik bir alana bir alt eşleştirmek için bu kodu tweek olabilir, ama sadece ayrı ayrı her bölgeyi kayıt yüzden sadece iki alanları vardır. Ayrıca bu bana her alanın içinde farklı yönlendirme özgürlüğü veriyor.

+0

Maalesef bana çalışmıyor. 2 Ana denetleyicim var - bunlardan biri alt etki alanında. Diğer çözümler Ev ' 'istisna' Birden tipleri isimli controller eşleşen bulundu' gibi atar. Adını benzersiz isimle değiştirdiğimde iyi çalışıyor. Ancak alt alana nasıl link oluşturuyorsunuz? Ben Html.RouteLink @ ("api_default" "Mobil") denedim ama bu kadar uygulamanın ana sayfaya bağlantı oluşturur ... – Cheburek

İlgili konular