Как перехватить и предварительно обработать QueryStrings в Asp.Net - PullRequest
5 голосов
/ 24 марта 2010

Мы отправляем регистрационные URL-адреса клиентам по электронной почте. Некоторые почтовые клиенты превращают URL в

url <url>

Я думаю, что это может произойти, когда пользователи перенаправляют письмо на себя, и в этот момент почтовый клиент переформатирует исходное письмо (возможно)

* 1006 Е.Г. *

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

Становится

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

Правильно создает System.Web.HttpRequestValidationException: было обнаружено потенциально опасное значение Request.QueryString

Где в коде я должен перехватывать эти экземпляры и очищать URL, чтобы пользователь перенаправлялся на исходную форму URL?

global.asax? Page_Init? HttpHandler? Трубопроводный

1 Ответ

2 голосов
/ 24 марта 2010

Вы можете перехватить его в Global Application_BeginRequest или в том же событии в HttpModule.

Global

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);
            }
        }
    }
}

Модуль

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);
            }

        }
    }
}

Это обработает ваш запрос с правильной строкой запроса в Запросе, независимо от того, что вы видите в адресе браузера. Вы можете предпринять дополнительные шаги для удаления мусора из указанного URL, но это в основном только эстетика.

...