2017-11-17 77 views
5

Tôi có một ứng dụng với một cái gì đó dọc theo dòng của cấu trúc tập tin này ASP.NET WebForms:Web.config trong thư mục phụ không hoạt động khi sử dụng các tuyến đường trang

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

Nếu tôi truy cập page.aspx bằng cách vào locahost/subfolder/page.aspx nó đọc web.config trong thư mục con tốt.

Tuy nhiên, tôi có một lộ trình để các thiết lập trang như vậy:

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

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

Và khi tôi cố gắng truy cập vào trang thông qua con đường đó, bằng cách vào localhost/test, tải trang tốt nhưng nó không đọc các giá trị từ web.config trong thư mục con.

Tôi có thiếu gì đó không? Có một số bước khác để cho phép một web.config phụ để làm việc với các tuyến đường?

Tôi đang truy cập vào web.config phụ sử dụng:

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

Trả lời

3

tôi đã có thể để giải quyết vấn đề của tôi bằng cách thêm dòng sau vào Global.asax của tôi:

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

Bằng cách làm điều này, tôi giả mạo thuộc tính Url của đối tượng Yêu cầu để sử dụng URL "thực" cho trang cho bất kỳ yêu cầu nào có Url khớp với một tuyến đường hiện có. Bằng cách này, khi WebConfigurationManager kéo lên cấu hình (mà nó thực hiện theo đường dẫn ảo hiện tại), nó kéo nó lên bằng cách sử dụng trang thích hợp.

Các vấn đề liên quan