【发布时间】:2009-10-07 21:02:22
【问题描述】:
我正在尝试向 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 来完成。我想对这类事情使用路由,而不是让一堆无用的文件夹把事情弄得乱七八糟。
谢谢!
【问题讨论】:
标签: c# asp.net iis-7 iroutehandler