2010-11-18 3 views
1

私は同じMVC2アプリケーションで3つのドメイン名を指しています。私が今持っているのは、トラフィック管理者として働いて特定のホスト名のコントローラとビューにリダイレクトするホーム管理者です。しかし、私は、これが原因となるURIの結果を...好きではないホスト名はMVC2ルートマッピングにどのように含まれますか?

例: www.webhost1.com/webhost1/imagegallery

は私が持っていることを好むだろう www.webhost2.com/webhost2/imagegallery :

www.webhost1.com/imagegallery

URIが少ない冗長に見えるようにルーティング評価にホスト名が含まれるであろうGlobal.asaxの中にルートを定義する方法はありますか?

答えて

5

Aha!、それはちょっとした手間がかかりました(そしてピークと古い本)が、私はそれを解決したと思います。

カスタムルート制約を作成する必要があります。 これは私がすぐに作られたものです。

public class hostnameConstraint : IRouteConstraint 
    { 
     protected string _hostname; 

     public hostnameConstraint (string hostname) 
     { 
      _hostname = hostname; 
     } 

     bool IRouteConstraint.Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
     { 
      if (httpContext.Request.Url.Host == _hostname) 
       return true; 
      return false; 
     } 
    } 

を次にあなたは、単にあなたのルートにそれを追加して、ルートを適用したいホスト名を指定します。そうですね:

routes.MapRoute(
      "ImageGallery", "{controller}/{action}", 
      new { controller = "Home", action = "Index"}, 
      new { hostname = new hostnameConstraint("webhost1.com") } 
     ); 

routes.MapRoute(
      "ImageGallery", "{controller}/{action}", 
      new { controller = "Home", action = "Index"}, 
      new { hostname = new hostnameConstraint("webhost2.com") } 
     ); 

などなどです。あなたのルートがどのようにレイアウトされているのか分かりませんが、ポイントはホスト名のための別個のルートを持つことができることです。これは、あなたが何をしているのかを可能にするはずです。

+0

あなたは私のヒーローです!私はちょうどこれをテストし、それは完全に動作しています。 –

+0

これは素晴らしいです。まさに私が探していたもの。ドメインのリダイレクトをホストできるサイトを作成しています。私はサイトがリダイレクトと同様にドメインを管理したかったのです。この制約のあるルートを追加すると、通常のサイトをホストドメインの下に置くことができ、それに応じて他のドメインもリダイレクトされます。ありがとう! –