2013-11-01 75 views
4

我想在asp.net中設置URL Masking來隱藏URL中的頁面名稱和查詢字符串。如何在ASP.NET中隱藏頁面名稱和查詢字符串?

目前我設置下面的代碼來執行全局應用程序文件中的URL重寫。

routeCollection.MapPageRoute("Login", "Login", "~/frmLogin.aspx"); 

但我想重寫URL的方式,它只會向最終用戶顯示域名。 http://www.domainname.com - 這樣的

請幫我設置它。

由於提前,

+0

設置你的頁面,默認頁應該是最好的,因爲在下面的答案建議,考慮到性能的角度來看。 – Arvin

回答

1

如果使用域掩蔽則沒有更改代碼,你得到同樣的結果。

+0

我們如何設置域掩碼? – Chirag

+0

你可以使用你的域名註冊商來做到這一點。 – smoore4

1

我嘗試了以下實驗目的的方法。所以我不知道它如何在複雜的頁面上回傳。

當您申請www.domainname.com時,實際請求將轉到www.domainname.com /default.aspx或您設置的任何其他默認頁面。在缺省頁面加載中,第一件事是檢查任何名爲say'pagetoview'的會話,如果它被設置,那麼server.transfer到那個頁面,其他服務器是默認頁面。

現在讓我們說一個用戶從頁面轉到form.aspx'。 form.aspx加載方法應檢查pagetoview會話變量(如果它與當前頁面名稱相同,然後取消設置),並繼續將pagetoview變量設置爲當前頁面名稱並重定向到域。

那裏的默認頁面會檢查併發生server.transfer。希望你用這個奇怪的方法得到一些意見。

2

我們在我們的應用程序中使用以下方法來簡單地在域上顯示標誌頁。它也可以修改爲其他頁面。

在Global.asax中:

routeCollection.MapPageRoute("SIGNIN", String.Empty, "~/signin.aspx"); 
+0

設置默認頁面應該比mappageroute更便宜,儘管兩者都應該工作。 – Arvin

1

你應該模擬asp.net用餅乾和用戶控制的路由。 所以我們只有一個名爲default.aspx的aspx文件,其他頁面應放置在用戶控件中。 把這個腳本在Default.aspx的結束:

<script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script> 
<script> 
    $(document).ready(function() { 
     $("a").click(function (e) { 
      e.preventDefault(); 
      var attrHref = $(this).attr("href"); 
      $.getJSON("/service.asmx/SetRouteCookie", { href: attrHref }, function (e) { 
       window.location.reload(); 
      }); 
     }); 
    }); 
</script> 

這個腳本禁用所有鏈接的行爲,然後我們處理手動點擊事件。 在click事件中,我們使用ajax調用Web服務方法。該服務設置了一定的cookie來保存當前頁面:創建cookie,併成功的回調,我們由JavaScript刷新頁面後

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false, UseHttpGet = true)] 
    public void SetRouteCookie() 
    { 
     if (HttpContext.Current.Request.QueryString["href"] != null) 
     { 
      string href = HttpContext.Current.Request.QueryString["href"]; 
      HttpCookie c = new HttpCookie("CurrentRoute", href); 
      c.Expires = DateTime.Now.AddHours(1); 
      HttpContext.Current.Response.Cookies.Add(c); 

      HttpContext.Current.Response.ContentType = "application/json"; 
      HttpContext.Current.Response.Write("{\"status\":\"ok\"}"); 

     } 
    } 

。 上默認Page_Load事件中,我們加載相應的用戶控件:

protected void Page_Load(object sender, EventArgs e) 
    { 
     #region process route 

     if (HttpContext.Current.Request.Cookies["CurrentRoute"] != null) 
     { 
      var route = HttpContext.Current.Request.Cookies["CurrentRoute"].Value.ToString(); 
      string pageName = GetPageName(route); 
      Placeholder1.Controls.Add(LoadControl("/ctrls/" + pageName + ".ascx")); 
     } 
     else 
     { 
      Placeholder1.Controls.Add(LoadControl("/ctrls/default.ascx")); 
     } 

     #endregion 

    } 

    public string GetPageName(string href) 
    { 
     int index = href.IndexOf("&"); 
     if (index == -1) 
      return href.Trim('/'); 
     else 
     { 
      return href.Substring(0, index).Trim('/'); 
     } 
    } 

我在git的創建示例代碼: HideRoute

1

您應該使用Server.Transfer方法 比如你在默認情況下有asp.net按鈕。ASPX 寫事件的點擊這樣的:

Server.Transfer("/login.aspx?q1=testQuery"); 

用這種方法,您的網址不會改變,在login.aspx的你可以讓你的查詢字符串

3

您可以設置frmLogin.aspx頁作爲默認頁網絡服務器。

如果您使用的是IIS 7,步驟如下:

1.Select your website 
2. In description click on default document 
3. Add your page (frmLogin.aspx) in and set its priority. 
+0

Chirag - 這對你的情況來說很完美。只要有人在您的瀏覽器中寫入域名,就會提供默認頁面。從性能的角度來看它是最好的,因爲它在IIS處理管道中很早。試試吧..如果你有一個不同的IIS版本,你可以隨時谷歌(或)問我們是否需要進一步的幫助。請確保將您的頁面放在IIS默認頁面列表的頂部。 – Arvin

相關問題