2010-05-31 11 views
1

le code à dépouillent /Default.aspx et //www ne fonctionne pas (comme prévu):décapage et default.aspx // www de l'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); 
      } 
     } 

il travaille habituellement, mais lors de la soumission d'un formulaire (par exemple vous connecter) le code ci-dessus INTERCEPTE la demande, puis redirige vers la même page. exemple:

  1. essayer d'arriver à la page: ~/SignIn/Default.aspx
  2. les demandes obtient interceptées et fixées à: ~/SignIn/
  3. remplir le formulaire, cliquez sur Se connecter
  4. l'URL de la page courante passe de: ~/SignIn/ à ~/SignIn/Default.aspx et se corrige à nouveau, annulant ainsi le traitement de la méthode SignIn (qui aurait redirigé le navigateur vers /SignIn/Success/) et la page est rechargée comme ~/SignIn/ et aucune connexion n'a été effectuée terminé.

aidez s'il vous plaît. pas sûr de quoi/comment réparer ici.

le principal EXIGENCE ici est:

enlever /Default.aspx et //www de

thnx

Répondre

1

Votre problème de url est à faire ici avec les requêtes GET et POST. Lorsque vous appelez Response.Redirect, vous demandez au client de faire une nouvelle demande GET à l'URL que vous fournissez. Donc, si vous appelez cela au début d'une demande comme une publication de formulaire qui était en fait une demande POST, vous perdez la publication. Comme la plupart des POST devraient eux-mêmes rediriger une fois l'action terminée, il suffira peut-être d'appliquer uniquement la logique que vous avez ci-dessus à une requête GET.

Vous pouvez accéder à la méthode de requête (GET ou POST) à l'aide de Request.HttpMethod.

+0

en effet. Je vous remercie. J'ai vérifié pour context.Request.HttpMethod.ToString(). Est égal à ("GET") et retourné si ce n'est pas le cas. c'est ** HttpMethod ** mais pas Method (pour une correction complète si quelqu'un l'utilise). – b0x0rz