Web窗体中的IRouteHandler:需要HttpContext.User的路由请求

我正在尝试为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)都为null。 遗憾的是,foo.aspx需要知道当前用户是什么(对于登录控件,角色等),因此呈现页面会抛出空引用exception。 我的猜测是,在Asp.Net获得用户信息连接HttpContext的机会之前,这些路由处理程序正在启动。 任何解决方法的想法?

PS – 我意识到这可以通过在http://mydomain.com/foo/default.aspx页面中执行Server.Transfer来实现。 我想使用路由来处理这类事情,而不是让一堆无用的文件夹混乱。

谢谢!

看到这个问题的答案非常相似。

我自己设法解决了这个问题。

就像这个问题一样 ,当路线起源以.aspx( http://mydomain.com/foo-origin.aspx )结束时,我的路线工作正常,但是当它们没有时失败( http://mydomain.com/ foo-origin / )。

关于使用Web表单设置路由的MSDN文章告诉您对Web配置进行一些更改,但是不需要在modules节点中将runAllManagedModulesForAllRequests设置为true:

      

现在它可以游泳了。