2015-07-03 17 views
5

Tworzę nowy projekt w Visual Studio przy użyciu szablonu SPA. Moim celem jest posiadanie aplikacji Angular/SPA, która będzie "hostować"/zawierać niektóre starsze aplikacje, które ostatecznie zostaną zmodernizowane/zmigrowane. Tak więc mam element iframe na stronie w mojej aplikacji SPA, a po kliknięciu elementu menu chcę załadować jedną ze starszych aplikacji ASP.NET w tym elemencie iframe (musi to być element iframe, jako starsza witryna używał ich, a ich architektura opiera się na nich). Mam problem z prawidłowym routingiem. Szablon SPA definiuje klasę defaultroute tak (zmieniłem RouteExistingFiles na true):Nie można poprawnie obsłużyć routingu w mieszanym środowisku VS

public class DefaultRoute : Route 
{ 
    public DefaultRoute() 
     : base("{*path}", new DefaultRouteHandler()) { 
     this.RouteExistingFiles = true; 
    } 
} 

i ja edytowany plik RouteConfig.cs ignorować "aspx" żądania stron, na przykład:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) { 
     routes.Ignore("*.aspx"); 
     routes.Add("Default", new DefaultRoute()); 
    } 
} 

handler domyślna trasa, która jest zdefiniowana, wygląda następująco:

public class DefaultRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) { 
     // Use cases: 
     //  ~/   -> ~/views/index.cshtml 
     //  ~/about  -> ~/views/about.cshtml or ~/views/about/index.cshtml 
     //  ~/views/about -> ~/views/about.cshtml 
     //  ~/xxx   -> ~/views/404.cshtml 
     var filePath = requestContext.HttpContext.Request.AppRelativeCurrentExecutionFilePath; 

     if (filePath == "~/") { 
      filePath = "~/views/index.cshtml"; 
     } 
     else { 
      if (!filePath.StartsWith("~/views/", StringComparison.OrdinalIgnoreCase)) { 
       filePath = filePath.Insert(2, "views/"); 
      } 

      if (!filePath.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase)) { 
       filePath = filePath += ".cshtml"; 
      } 
     } 

     var handler = WebPageHttpHandler.CreateFromVirtualPath(filePath); // returns NULL if .cshtml file wasn't found 

     if (handler == null) { 
      requestContext.RouteData.DataTokens.Add("templateUrl", "/views/404"); 
      handler = WebPageHttpHandler.CreateFromVirtualPath("~/views/404.cshtml"); 
     } 
     else { 
      requestContext.RouteData.DataTokens.Add("templateUrl", filePath.Substring(1, filePath.Length - 8)); 
     } 

     return handler; 
    } 
} 

struktura katalogów jest tak:

MySPA

  • SPA < - zawiera aplikację SPA (.NET 4.5)

  • Legacy < - zawiera starszych aplikacji (.NET 3.0)

W IIS, I ustawić starszy folder jako katalog wirtualny (podkatalog) w aplikacji SPA.

Jak skonfigurować routing, aby po kliknięciu elementu menu i wysłaniu żądania (zawierającego adres URL z informacją o ciągu zapytania) dla strony .aspx, żądanie może zostać przekierowane do aplikacji starszej wersji ?

Odpowiedz

1

Rozwiązałem ten problem. Problem został spowodowany kilkoma problemami. Ale problem, który dotyczy moich informacji powyżej, był ... musiałem znaleźć właściwy sposób, aby zignorować żądania dotyczące starszych stron aspx z kodu routingu nowej witryny. Tak więc, w pliku RouteConfig.cs, umieściłem to oświadczenie ignorować jako pierwsza linia funkcji RegisterRoute:

routes.Ignore("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?"}); 

To poprawione główny problem, nie było innych drobnych problemów, które mylić sytuacji, ale mam zidentyfikowane czym oni są i pracuję nad nimi. Zignorowanie starszych adresów URL w funkcji routingu było więc właściwym rozwiązaniem.