我正在尝试向 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 来完成。我想为这类事情使用路由,而不是让一堆无用的文件夹把事情弄得乱七八糟。
谢谢!