从url中删除default.aspx和// www

时间:2010-05-31 16:58:15

标签: c# asp.net url global-asax

剥离/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. 当前页面网址从:~/SignIn/转到~/SignIn/Default.aspx并再次修复,从而取消了方法SignIn的处理(这会将浏览器重定向到{{1} })并且页面重新加载为/SignIn/Success/,并且没有登录。
  5. 请帮忙。不确定这里有什么/如何解决。

    这里的主要要求是:

    从网址中移除~/SignIn//Default.aspx

    日Thnx

1 个答案:

答案 0 :(得分:1)

这里的问题与GET和POST请求有关。当您致电Response.Redirect时,您会指示客户端向您提供的网址发出新的GET请求。因此,如果您在请求的早期调用此类请求,例如实际上是POST请求的表单回发,则会丢失帖子。由于大多数POST应该在操作完成后自行重定向,因此仅将上面的逻辑应用于GET请求就足够了。

您可以使用Request.HttpMethod访问请求方法(GET或POST)。