代码之家  ›  专栏  ›  技术社区  ›  b0x0rz

从URL中剥离default.aspx和//www

  •  1
  • b0x0rz  · 技术社区  · 16 年前

    要删除的代码 /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);
                }
            }
    

    它通常可以工作,但是在提交表单(例如登录)时,上面的代码会截获请求,然后重定向到同一页。 例子:

    1. 尝试到达页面: ~/SignIn/Default.aspx
    2. 请求被截获并修复为: ~/SignIn/
    3. 填写表单,单击“登录”
    4. 当前页面的URL来自: ~/符号/ ~/登录/default.aspx 并再次固定,从而使该方法的处理无效 SignIn (将浏览器重定向到 /SignIn/Success/ )页面重新加载为 ~/符号/ 没有登录。

    请帮忙。不知道该怎么解决。

    这里的主要要求是:

    去除 /ASPX /WWW 从URL的

    THNX

    1 回复  |  直到 16 年前
        1
  •  1
  •   David M    16 年前

    这里的问题与GET和POST请求有关。当你打电话 Response.Redirect ,指示客户端对所提供的URL发出新的get请求。因此,如果您在请求的早期调用它,比如表单回发,实际上是一个回发请求,那么您将丢失该邮件。由于大多数文章在操作完成后都应该自己重定向,因此只将上面的逻辑应用于GET请求就足够了。

    您可以使用 Request.HttpMethod .