我想在asp.net中設置URL Masking來隱藏URL中的頁面名稱和查詢字符串。如何在ASP.NET中隱藏頁面名稱和查詢字符串?
目前我設置下面的代碼來執行全局應用程序文件中的URL重寫。
routeCollection.MapPageRoute("Login", "Login", "~/frmLogin.aspx");
但我想重寫URL的方式,它只會向最終用戶顯示域名。 http://www.domainname.com - 這樣的
請幫我設置它。
由於提前,
我想在asp.net中設置URL Masking來隱藏URL中的頁面名稱和查詢字符串。如何在ASP.NET中隱藏頁面名稱和查詢字符串?
目前我設置下面的代碼來執行全局應用程序文件中的URL重寫。
routeCollection.MapPageRoute("Login", "Login", "~/frmLogin.aspx");
但我想重寫URL的方式,它只會向最終用戶顯示域名。 http://www.domainname.com - 這樣的
請幫我設置它。
由於提前,
我嘗試了以下實驗目的的方法。所以我不知道它如何在複雜的頁面上回傳。
當您申請www.domainname.com時,實際請求將轉到www.domainname.com /default.aspx或您設置的任何其他默認頁面。在缺省頁面加載中,第一件事是檢查任何名爲say'pagetoview'的會話,如果它被設置,那麼server.transfer到那個頁面,其他服務器是默認頁面。
現在讓我們說一個用戶從頁面轉到form.aspx'。 form.aspx加載方法應檢查pagetoview會話變量(如果它與當前頁面名稱相同,然後取消設置),並繼續將pagetoview變量設置爲當前頁面名稱並重定向到域。
那裏的默認頁面會檢查併發生server.transfer。希望你用這個奇怪的方法得到一些意見。
我們在我們的應用程序中使用以下方法來簡單地在域上顯示標誌頁。它也可以修改爲其他頁面。
在Global.asax中:
routeCollection.MapPageRoute("SIGNIN", String.Empty, "~/signin.aspx");
設置默認頁面應該比mappageroute更便宜,儘管兩者都應該工作。 – Arvin
你應該模擬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
您應該使用Server.Transfer方法 比如你在默認情況下有asp.net按鈕。ASPX 寫事件的點擊這樣的:
Server.Transfer("/login.aspx?q1=testQuery");
用這種方法,您的網址不會改變,在login.aspx的你可以讓你的查詢字符串
您可以設置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.
Chirag - 這對你的情況來說很完美。只要有人在您的瀏覽器中寫入域名,就會提供默認頁面。從性能的角度來看它是最好的,因爲它在IIS處理管道中很早。試試吧..如果你有一個不同的IIS版本,你可以隨時谷歌(或)問我們是否需要進一步的幫助。請確保將您的頁面放在IIS默認頁面列表的頂部。 – Arvin
設置你的頁面,默認頁應該是最好的,因爲在下面的答案建議,考慮到性能的角度來看。 – Arvin