2016-07-27 37 views
0

私の新しいWebアプリケーションは、動的Webページであり、サブドメインに基づいて動作します。 つまりhttp://company1234.domain.com パラメータ「company1234」を取得し、Web API呼び出しを行い、表示するページ情報を取得します。ASP.NET MVCルーティング - サブドメイン

これはすべて正常に動作します。私の問題は、私はhttp://company1234.domain.com/Home/GetClient?id=abcd または http://company1234.domain.com/Home/GetClientAccountDetails?model=abcd&acc=1234

私のすべてのルーティングが破壊される。すなわち、パラメータのURLを呼び出す必要がある場合、私はこれを手直し方法を見つけ出す傾けること?ですが

public class SubdomainRoute : RouteBase 
     { 
      public override RouteData GetRouteData(HttpContextBase httpContext) 
      { 
       if (httpContext.Request == null || httpContext.Request.Url == null) 
       { 
        return null; 
       } 

       var host = httpContext.Request.Url.Host; 
       var index = host.IndexOf("."); 

       string[] segments = httpContext.Request.Url.PathAndQuery.TrimStart('/').Split('/'); 

       if (index < 0) 
       { 
        return null; 
       } 

       var subdomain = host.Substring(0, index); 

       string controller = (segments.Length > 0) ? segments[0] : "Home"; 
       string action = (segments.Length > 1) ? segments[1] : "Index"; 


       var routeData = new RouteData(this, new MvcRouteHandler()); 
       routeData.Values.Add("controller", "Home"); 
       routeData.Values.Add("action", action); 
       routeData.Values.Add("subdomain", subdomain); 



      return routeData; 
      } 

      public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
      { 
       //Implement your formating Url formating here 
       return null; 
      } 
     } 

私のコントローラメソッド

public ActionResult Index(string subdomain) 
     { 
//Go get custom page info 
      var profile = GetProfile(subdomain); 



      return View("Default", profile); 
     } 

public JsonResult GetClient(string id) 
     { 

//do stuff 
} 

マイグローバル

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.Add(new SubdomainRoute()); 

      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.IgnoreRoute("favicon.ico"); 
      routes.MapRoute("Home", 
          "", 
          new { controller = "Application", action = "Login" }); 
      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new {controller = "Home", action = "Index", id = UrlParameter.Optional}); 
     } 

私は私が http://company1234.domain.com/Home/GetClient?id=1234呼び出しがあれば、その後、この方法がヒットした http://company1234.domain.com/Home/GetClient

を呼び出す場合それは動作しません

私はこれを修正し、それを動作させるために何をする必要がありますか?

答えて

0

ルートは2つのことを実行する必要があります。彼らは要求に一致する場合

  1. を決定します。
  2. これらの場合は、一連のルート値を返します。

到着したリクエストと一致しない場合は、ルートがnullを返すことが必須です。これは、ルーティングフレームワークに、ルートテーブルの次の登録済みルートを確認するように指示します。

問題は、渡されるURLが処理すべきものであることを確認しないため、常にリクエストに一致し、他のすべてのルートの前に登録されているため、到達する。通常、httpContext.Request.Pathがいくつかの基準に一致するかどうかがチェックされ、そうでない場合はnullが返されます。

関連する問題