加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

如何在Asp.Net中拦截和预处理QueryStrings

发布时间:2020-12-16 03:19:01 所属栏目:asp.Net 来源:网络整理
导读:我们通过电子邮件向客户发送注册网址.一些电子邮件客户端正在将网址转换为 url url 我认为当用户将电子邮件转发给自己时,可能会发生这种情况,此时电子邮件客户端会重新格式化原始电子邮件(可能) 例如. https://my.app.com/login.aspx?param=var 变 https://m
我们通过电子邮件向客户发送注册网址.一些电子邮件客户端正在将网址转换为

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值

我应该在代码中拦截这些实例并对网址进行消息处理,以便将用户重定向到网址的原始格式?

Global.asax中?
Page_Init?
HttpHandler的?
管道?

解决方法

您可以在Global Application_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);
            }

        }
    }
}

无论您在浏览器地址中看到什么,这都将使用请求中的正确查询字符串处理您的请求.您可以采取额外的步骤从报告的网址中删除垃圾,但这主要是美学.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读