使用页面路由时,子目录中的Web.config不起作用

时间:2017-11-17 20:24:39

标签: asp.net configuration routes

我有一个ASP.NET WebForms应用程序,其中包含以下文件结构:

page.aspx

如果我通过转到locahost/subfolder/page.aspx来访问protected void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } public void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute("", "test", "~/subfolder/page.aspx"); } ,那么它会很好地读取子文件夹中的web.config。

但是,我有一个如此的页面设置路径:

localhost/test

当我尝试通过该路由访问页面时,通过转到var test = WebConfigurationManager.AppSettings["testSetting"]; ,页面加载得很好,但无法从子文件夹中的web.config读取值。

我错过了什么吗?是否还有其他步骤允许子web.config使用路由?

我正在使用:

访问子web.config
Loader

1 个答案:

答案 0 :(得分:3)

我已经能够通过在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.TrimStart('?'), false);
        }
    }
}

通过这样做,我伪造了Request对象的Url属性以使用" real"具有与现有页面路由匹配的Url的任何请求的页面的URL。这样,当WebConfigurationManager提取配置(由当前虚拟路径执行)时,它会使用适当的页面将其拉出。