Skip to main content
 首页 » 编程设计

c#之Web 窗体中的 IRouteHandler : Routing requests that require HttpContext. 用户

2024年01月13日31over140

我正在尝试向 Asp.Net Web Forms 应用程序(在 IIS 7 下运行,集成模式)添加一个非常基本的路由:对于到达 http://mydomain.com/foo/ 的请求我想显示动态页面 ( http://mydomain.com/foopage.aspx ) 的结果。

我已经创建了一个 RouteHandler 来执行所有这些并且它似乎路由正确。

    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     var page = System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("~/foo.aspx", typeof(MyApp.Web.Foo)) as MyApp.Web.Foo; 
     return page as IHttpHandler; 
    } 

问题是,在我的 RouteHandler 的 GetHttpHandler 方法中,当前用户的所有实例(requestContext.HttpContext.User、System.Web.HttpContext.Current.User)都是空的。遗憾的是,foo.aspx 需要知道当前用户是什么(用于登录控件、角色等),因此呈现页面会抛出空引用异常。我的猜测是,这些路由处理程序在 Asp.Net 有机会连接 HttpContext 和用户信息之前就已经启动了。有解决方法吗?

PS - 我意识到这可以通过在 http://mydomain.com/foo/default.aspx 的页面中执行 Server.Transfer 来完成.我想为这类事情使用路由,而不是让一堆无用的文件夹把事情搞得一团糟。

谢谢!

请您参考如下方法:

查看 this 的答案问题,非常相似。