2017-11-17 106 views
5

Mam aplikacji ASP.NET WebForms z czymś na wzór tej struktury pliku:Web.config w podkatalogu nie działa podczas korzystania z tras strona

root\ 
    default.aspx 
    web.config 
    subfolder\ 
    page.aspx 
    web.config 

Gdybym dostęp page.aspx przechodząc do locahost/subfolder/page.aspx czyta plik web.config w podfolderze.

Jednak mam trasę do ustawień strony tak:

protected void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
} 

public void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute("", "test", "~/subfolder/page.aspx"); 
} 

I gdy próbuję otworzyć stronę tą drogą, przechodząc do localhost/test, strona ładuje się po prostu w porządku, ale to nie odczytaj wartości z pliku web.config w podfolderze.

Czy brakuje mi czegoś? Czy jest jakiś inny krok, aby pozwolić sub web.config pracować z trasami?

mam dostępu do web.config sub przy użyciu:

var test = WebConfigurationManager.AppSettings["testSetting"]; 

Odpowiedz

3

I byli w stanie rozwiązać mój problem przez dodanie następujących do mojego Global.asax:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpRequest request = HttpContext.Current.Request; 
    Route route = RouteTable.Routes.Where(x => (x as Route)?.Url == request.Url.AbsolutePath.TrimStart('/')).FirstOrDefault() as Route; 
    if (route != null) 
    { 
     if (route.RouteHandler.GetType() == typeof(PageRouteHandler)) 
     { 
      HttpContext.Current.RewritePath(((PageRouteHandler)route.RouteHandler).VirtualPath, request.PathInfo, request.Url.Query, false); 
     } 
    } 
} 

Robiąc to, podrabiam właściwość Url obiektu Request, aby użyć "prawdziwego" adresu URL do strony dla dowolnego żądania z adresem URL pasującym do istniejącej trasy strony. W ten sposób, gdy WebConfigurationManager wyciągnie konfigurację (którą wykonuje według bieżącej ścieżki wirtualnej), pobiera ją za pomocą odpowiedniej strony.