2017-11-17 166 views
5

Bu dosya yapısı çizgisinde bir şey ile bir ASP.NET WebForms uygulama var: Ben locahost/subfolder/page.aspx giderek page.aspx erişirsenizWeb.config çalışmıyor

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

alt klasördeki web.config dosyasını çok iyi okur.

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

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

Ve localhost/test giderek, bu yolla sayfasına erişmeye çalıştığınızda, sayfa yüklendiğinde sadece iyi ama başarısız:

Ancak, ben şöyle sayfa kurulum için bir rota var alt klasördeki web.config dosyasındaki değerleri okuyun.

Bir şey mi eksik? Bir sub web.config'in rotalarla çalışmasına izin vermek için başka bir adım var mı?

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

yaparak: Ben Global.asax için aşağıdaki ekleyerek sorunumu çözmek mümkün oldum

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

cevap

3

:

kullanıyorum alt web.config giriyorum Bu, Url ile var olan bir sayfa rotası eşleşen herhangi bir istek için "gerçek" URL'yi kullanmak için Request nesnesinin Url özelliğini çıkarıyorum. Bu şekilde, WebConfigurationManager yapılandırmayı (mevcut sanal yola göre yapar) çektiğinde, ilgili sayfayı kullanarak bunu çeker.