簡體   English   中英

從網址中剝離default.aspx和// www

[英]stripping default.aspx and //www from the url

/Default.aspx//www的代碼不起作用(按預期方式):

protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            string url = context.Request.RawUrl.ToString();

            bool doRedirect = false;

            // remove > default.aspx
            if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase))
            {
                url = url.Substring(0, url.Length - 12);
                doRedirect = true;
            }

            // remove > www
            if (url.Contains("//www"))
            {
                url = url.Replace("//www", "//");
                doRedirect = true;
            }

            // redirect if necessary
            if (doRedirect)
            {
                context.Response.Redirect(url);
            }
        }

它通常可以正常工作,但是在提交表單(例如登錄)時,上面的代碼在INTERCEPTS上發出請求,然后重定向到同一頁面。 例:

  1. 嘗試到達頁面: ~/SignIn/Default.aspx
  2. 請求被攔截並固定為: ~/SignIn/
  3. 填寫表格,點擊登錄
  4. 當前頁面的URL從~/SignIn/~/SignIn/Default.aspx並再次得到修復,從而使SignIn方法的處理無效(該方法會將瀏覽器重定向到/SignIn/Success/ ),並且頁面為重新加載為~/SignIn/並且未完成登錄。

請幫忙。 不知道該如何/如何解決。

這里的主要要求是:

從網址中刪除/Default.aspx//www

n

您的問題是與GET和POST請求有關。 當您調用Response.Redirect ,您指示客戶端對您提供的URL進行新的GET請求。 因此,如果您在表單回發這樣的請求(實際上是POST請求)中盡早調用此命令,則會丟失該帖子。 由於大多數POST都應在操作完成后自行重定向,因此僅將上面具有的邏輯應用於GET請求就足夠了。

您可以使用Request.HttpMethod訪問請求方法(GET或POST)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM