2009-10-07 60 views
2

我試圖添加一個非常基本的路由到Asp.Net Web窗體應用程序(在IIS 7下運行,集成模式):對於請求來http://mydomain.com/foo/我會喜歡顯示動態頁面的結果(http://mydomain.com/foopage.aspx)。Web窗體中的IRouteHandler:需要HttpContext.User的路由請求

我已經創建了一個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 - 我意識到這可以通過在頁面上執行Server.Transfer在http://mydomain.com/foo/default.aspx完成。我想使用這種路由,而不是讓一堆無用的文件夾混亂。

謝謝!

回答

0

我設法弄清了這一個自己。

就像this question,當路線原點的.aspx(http://mydomain.com/foo-origin.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> 

現在,它的工作原理順順當當。

0

查看this的問題,非常相似。