2016-03-09 25 views
0

我做了一個類似於登錄/ {id}/{hash}/{gen}/{dt}(這是用於自動識別)的路由。檢查所有鍵的routedata.values

當我使用URL 「登錄」「登錄/值1 /值2 /值3/VALUE4」,它工作得很好。

但在情況下,當我只使用一個,兩個或三個路由值,它給了我錯誤404

例如,「登錄/ VALUE1」「登錄/值1 /值2」「登錄/值1 /值2 /值3」發生錯誤404(找不到頁面)。

所以我需要的是,如果有一個完整的路由上的網址不匹配,我需要重定向到登錄而不是PageNotFound頁。

「登錄/ VALUE1」 ==>「登錄」

「登錄/ VALUE1/VALUE2」 ==>「登錄」

「登錄/ VALUE1/value2/value3「 ==>」登錄「

我的代碼如下:

if (Page.RouteData.Values.ContainsKey("id") && 
    Page.RouteData.Values.ContainsKey("hash") && 
    Page.RouteData.Values.ContainsKey("gen") && 
    Page.RouteData.Values.ContainsKey("dt")) 
    { 
     if (CheckUsersData()) 
     { 
      Session["id"] = Page.RouteData.Values["id"].ToString(); 
      Response.Redirect("~/Home"); 
     } 
     else 
      Response.Redirect("~/Login"); //if auto identification data (route values) is incorrect 
    } 
else 
    Response.Redirect("~/Login"); 

在此先感謝!

注意!當然,我可以在global.asax中註冊三條路線,但我想找到(可能)更好的解決方案。

+0

我試圖谷歌,我想在這裏尋找,但沒有類似的問題。我剛剛看到一個問題,如何重定向到PageNotFound頁面,但我不需要。 – Khazratbek

回答

0

只是增加了三個多條航線,所以產生的佈線是:

Login/{id} 
Login/{id}/{hash} 
Login/{id}/{hash}/{gen} 
Login/{id}/{hash}/{gen}/{dt} 

和代碼一樣簡單

if (Page.RouteData.Values.ContainsKey("id") && 
    Page.RouteData.Values.ContainsKey("hash") && 
    Page.RouteData.Values.ContainsKey("gen") && 
    Page.RouteData.Values.ContainsKey("dt")) 
    { 
     if (CheckUsersData(/*my_arguments_here*/)) 
     { 
      Session["id"] = Page.RouteData.Values["id"].ToString(); 
      Response.Redirect("~/Home"); 
     } 
     else 
      Response.Redirect("~/Login"); //if auto identification data (route values) is incorrect 
}