2010-12-21 43 views
2

我有從數據庫註冊到asp.net網站(非MVC)的路由。該航線登記罰款,當我在我登錄他們所有的工作是什麼,我要做的是創建基於一些路由數據的登陸頁:如何使NET WebForm路由與授權工作

頁是[現場] /着陸/戴爾

路線看起來像:「登陸/ {客戶端}」,它路由到我的頁面Login.aspx,在那裏我得到的客戶端的路線,然後顯示一些自定義品牌的數據基於價值。

在我的web.config,我有我的身份驗證模式設置爲形式,用我的loginUrl =「的Login.aspx」

當用戶沒有授權cookie,它的用戶重定向到:

[site] /Login.aspx?ReturnUrl=%2flanding%2fdell而不是保留路由網址,並顯示正確的數據。 IIS服務器甚至根本不處理路由,只是將用戶發送到Login.aspx頁面。

我嘗試了幾個補充我的web.config: <location path="landing"><system.web><authorization><allow users="*"/></auth></sys.web></loc>等,和許多變化,但似乎沒有任何工作。

想法任何人?我認爲這是一個普遍的問題,而且它沒有很好的文檔記錄。

+0

作爲一種解決方法,目前我評估了Request.QueryString [「ReturlUrl」]值並做了一些工作,但這並不好。這將使我能夠完成工作,直到找到解決方案。仍然打開想法... – jakmas 2010-12-22 14:25:08

回答

1

好吧,終於搞清楚了。我將嘗試以簡單的形式解釋這一點,希望有一天能幫助別人。

這裏要記住的幾件事,首先,它是一個非MVC應用程序,純粹是webforms。

在我Global.ascx,有一個方法:

void RegisterRoutes(RouteCollection routes) 
    { 
     routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler())); 
     routes.Add(new Route("{service}.asmx/{*pathInfo}", new StopRoutingHandler())); 
     routes.Add(new Route("*.psd/{*pathinfo}", new StopRoutingHandler())); 
     routes.Add(new Route("*.js/{*pathinfo}", new StopRoutingHandler())); 
     routes.Add(new Route("*.jpg/{*pathinfo}", new StopRoutingHandler())); 
     routes.Add(new Route("*.gif/{*pathinfo}", new StopRoutingHandler())); 
     routes.Add(new Route("{resource}.css/{*pathinfo}", new StopRoutingHandler())); 

     routes.RouteExistingFiles = false; 

     Data.DataContext context = new Data.DataContext(); 

     var AppRoutes = (from r in context.SomeRouteTable 
         select r).ToList(); 

     foreach (var AppRoute in AppRoutes) 
     { 
      routes.MapPageRoute(AppRoute.RouteName, 
           AppRoute.RouteUrl, 
           AppRoute.PhysicalFile, false); 
      // The important part is the "false" above. It is the 
      // CheckPhysicalUrlAccess parameter. 
     } 
    } 

現在,在web.config中,一個條目需要添加:

<location path="landing"><system.web><authorization><allow users="*"/></authorization></system.web></location> 

在Application_Start空隙內Global.asax文件只需調用RegisterRoutes函數:

this.RegisterRoutes(RouteTable.Routes); 

重新啓動您的服務器並完成。現在您的登錄頁面的路線將起作用,但是您的其他路線都將是安全的。如果您需要公開另一條路由,則只需將路由的基本路徑添加到允許users =「*」的system.web授權部分即可。

另一件事,就是希望幫助他人的是能夠將所有JavaScript(js),圖像(psd,jpg,gif),真正的靜態文件從路由處理程序中移出。在整個網絡中,.axd和.asmx都進行了解釋,但是在處理webforms模型中的路由時,它從來沒有出現在我可以找到的其他靜態文件類型忽略的位置。

我希望這可以幫助其他人,併爲他們節省下來的時間,用於跟蹤所有這些,並完成所有單元測試。

享受鄉親。

+0

Data.DataContext的命名空間是什麼? – 2015-11-05 08:59:52