2

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

谢谢!

4

2 回答 2

0

这个问题的答案,很相似。

于 2009-10-08T03:28:49.743 回答
0

我自己设法弄清楚了这一点。

就像这个问题一样,当路由来源以 .aspx ( http://mydomain.com/foo-origin.aspx ) 结尾时,我的路由工作得很好,但当它们没有 (http://mydomain.com/) 时失败了foo-起源/ )。

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

<configuration>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
  </system.webServer>
</configuration>

现在它可以游泳了。

于 2009-10-09T15:32:41.057 回答