代码之家  ›  专栏  ›  技术社区  ›  Nick Allen

如何在Asp.Net中拦截和预处理查询字符串

  •  5
  • Nick Allen  · 技术社区  · 14 年前

    我们通过电子邮件向客户发送注册URL。一些电子邮件客户端正在将url转换为

    url <url>
    

    我认为这可能发生在用户将电子邮件转发到自己身上时,此时电子邮件客户端会重新格式化原始电子邮件(可能)

    例如。

    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值

    第一页? HttpHandler? 管道?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Sky Sanders    14 年前

    您可以在全局应用程序\u BeginRequest中捕获它,也可以在HttpModule的同一事件中捕获它。

    全球的

    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中删除垃圾,但这主要只是美观而已。