【问题标题】:IRouteHandler in Web Forms: Routing requests that require HttpContext.UserWeb 窗体中的 IRouteHandler:需要 HttpContext.User 的路由请求
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      this question 非常相似,当路由源以 .aspx (http://mydomain.com/foo-origin.aspx) 结尾时,我的路由运行良好,但当它们没有以 .aspx (http://mydomain.com/foo-origin/) 结束时,我的路由就失败了。

      The MSDN article on setting up routing with web forms 告诉您对 Web 配置进行一些更改,但忽略了您需要在模块节点中将 runAllManagedModulesForAllRequests 设置为 true:

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

      现在它可以正常工作了。

      【讨论】:

        猜你喜欢
        • 2018-03-26
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        • 2010-09-15
        • 2013-10-04
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        相关资源
        最近更新 更多