2010-03-24 7 views
5

Wir senden Registrierungs-URLs an Kunden per E-Mail. Einige der E-Mail-Clients wenden sich die URL inAbfangen und Vorverarbeiten von QueryStrings in Asp.Net

url <url> 

ich denke, es passieren kann, wenn der Benutzer die E-Mail an sich selbst weiterleiten, an welcher Stelle die E-Mail-Client neu formatiert die ursprüngliche E-Mail (vielleicht)

Z.B.

https://my.app.com/login.aspx?param=var

Wird

https://my.app.com/login.aspx?param=var%20%3Chttps://my.app.com/login.aspx?param=var%3E

die zu Recht System.Web.HttpRequestValidationException produziert: Ein potenziell gefährlich Request.QueryString Wert

Wo im Code erkannt wurde sollte ich diese Instanzen abfangen und die URL so anordnen, dass der Benutzer auf die ursprüngliche Form der URL umgeleitet wird?

global.asax? PageInit? HttpHandler? Pipeline?

Antwort

2

Sie können es in Global Application_BeginRequest oder in demselben Ereignis in einem HttpModule abfangen.

Globale

using System; 
using System.Web; 

namespace MassageIncomingRequestUrl 
{ 
    public class Global : HttpApplication 
    { 
     protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      var app = (HttpApplication) sender; 
      string path = app.Context.Request.Url.PathAndQuery; 
      int pos = path.IndexOf("%20%3C"); 
      if (pos > -1) 
      { 
       path = path.Substring(0, pos); 
       app.Context.RewritePath(path); 
      } 
     } 
    } 
} 

Modul

using System; 
using System.Web; 

namespace MassageIncomingRequestUrl 
{ 
    public class UrlMungeModule : IHttpModule 
    { 
     #region IHttpModule Members 

     public void Init(HttpApplication context) 
     { 
      context.BeginRequest += BeginRequest; 
     } 

     public void Dispose() 
     { 
      //nop 
     } 

     #endregion 

     private static void BeginRequest(object sender, EventArgs e) 
     { 
      var app = (HttpApplication)sender; 
      string path = app.Context.Request.Url.PathAndQuery; 
      int pos = path.IndexOf("%20%3C"); 
      if (pos>-1) 
      { 
       path = path.Substring(0,pos); 
       app.Context.RewritePath(path); 
      } 

     } 
    } 
} 

Dies wird Ihre Anfrage mit dem richtigen Abfrage-String in der Anfrage verarbeitet bekommen, unabhängig davon, was Sie in der Browser-Adress sehen. Sie können möglicherweise zusätzliche Schritte ergreifen, um den Müll aus der gemeldeten URL zu entfernen, aber das ist hauptsächlich nur Ästhetik.

+0

Danke, werde dies versuchen ... –