2015-07-03 20 views
5

Visual Studio'da SPA şablonunu kullanarak yeni bir proje oluşturuyorum. Amacım, sonunda modernleştirilecek/taşınacak bazı eski uygulamaları barındıracak/barındıracak bir Angular/SPA uygulamasına sahip olmak. Bu yüzden, SPA uygulamamdaki bir sayfada bir iframe var ve bir menü öğesi tıklandığında, bu iframe'deki eski ASP.NET uygulamalarından birini yüklemek istiyorum (bu, eski site olarak bir iframe içinde olmak zorundadır. onları kullandı ve mimarisi onlara dayanıyor. Yönlendirme hakkını elde etme konusunda sorun yaşıyorum.Karışık VS ortamında yönlendirme doğru şekilde işlenemiyor

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

ve böyle "aspx" sayfa isteklerini, görmezden RouteConfig.cs dosyasını düzenledikten:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) { 
     routes.Ignore("*.aspx"); 
     routes.Add("Default", new DefaultRoute()); 
    } 
} 
SPA şablon böyle bir defaultroute sınıfı (true RouteExistingFiles değiştirildi) tanımlar

tanımlanan varsayılan rota işleyicisi, şöyle görünür:

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

dizin yapısı şu şekildedir:

MySpa

  • SPA < - ihtiva eder (.net 3.0) eski uygulamalar IIS

, I - SPA uygulaması (net 4,5)

  • Eski < içerir SPA uygulamasında bir sanal dizin (alt dizin) olarak ayarlanmış eski klasörü bulun.

    Yönlendirmeyi, bir menü öğesi tıklatıldığında ve istek bir .aspx sayfası için istekte bulunulduğunda (sorgu dizesi bilgisine sahip bir URL içeren), isteği eski uygulamaya yönlendirilebilecek şekilde nasıl ayarlayabilirim? ?

  • cevap

    1

    Bu sorunu çözdüm. Sorun çeşitli sorunlardan kaynaklandı. Ancak, en çok benim yukarıdaki bilgilerle ilgili olan sorun şuydu ... Yeni sitenin yönlendirme kodunun içinden gelen eski aspx sayfalarının isteklerini görmezden gelmenin doğru yolunu bulmam gerekiyordu. Yani, RouteConfig.cs dosyasında, ben RegisterRoute fonksiyonunun ilk satırı olarak bu görmezden deyimi yerleştirilir: durum karıştı ama ben belirledik diğer küçük sorunlar vardı ana sorunu düzeltilmiş

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

    , ne oldukları ve ben bunun üzerinde çalışıyorum. Dolayısıyla, yönlendirme işlevindeki eski URL'leri göz ardı etmek doğru çözümdür.

    İlgili konular