2010-05-31 3 views
1

код, чтобы лишить /Default.aspx и //www не работает (как и ожидалось):зачистки default.aspx // и WWW из URL

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 из

Thnx

ответ

1

Ваша проблема URL, здесь это делать с GET и POST запросов. Когда вы вызываете Response.Redirect, вы даете указание клиенту сделать новый запрос GET на указанный вами URL. Поэтому, если вы вызываете это в начале запроса, как обратная передача формы, которая на самом деле является POST-запросом, вы теряете сообщение. Поскольку большинство POST-адресов сами должны перенаправляться после завершения действия, этого может быть достаточно, чтобы применить только приведенную выше логику к запросу GET.

Вы можете получить доступ к методу запроса (GET или POST) с помощью Request.HttpMethod.

+0

действительно. Спасибо. Я проверил для context.Request.HttpMethod.ToString(). Equals («GET») и вернулся, если не так. это ** HttpMethod **, хотя и не метод (для полной корректности, если кто-либо использует это). – b0x0rz

Смежные вопросы