欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

在asp.net中对url地址统一编码的示例

创建时间:2012年06月05日 16:26  阅读次数:(5783)
分享到:
因为自己现在所在项目中很多url传值的地方都没有将值经过Server.UrlEncode编码而直接传值,所以造成在传值的时候存在大量错误。比如值中存在汉字,或者存在+,/等特殊符号时,接收到的值就和原来的传的值不一样了。所以我们在url传值时一定要将值经UrlEncode编码后再传,url的编码可参看本站:
Url编码与解码分析

但现在项目中已经存在大量的没有编码的情况该怎么办呢?一个一个去改的话,总会存一些没有改到的地方。所以打算添加IhttpModel类,在HTTP执行管线链中的第一个事件BeginRequest中对未编码的url参数进行编码。

示例如下:
注:本示例只起一个引子的作用,未列出所有特殊符号的替换。

我们在下面的示例中演示将url中的+号替换成"%2B"。因为直接传+号,接收到的值会是一个空格。
public class SHttpModule : IHttpModule
{
private List<Pair> _encodelist;
/// <summary>
/// 须经url编码的字符
/// </summary>
public List<Pair> EncodeList
{
    get
    {
        if (_encodelist == null)
        {
            _encodelist = new List<Pair>();
        }

//在这个list中可以添加更多的须编码的字符
        _encodelist.Add(new Pair("+", "%2B"));

        return _encodelist;
    }
}

public void Init(HttpApplication HttpApplication)
{
    //BeginRequest事件为http执行管线链中第一个发生的事件,在这个事情中,我们可以将未经编码的特殊字符替代成编码后的字符,然后利用RewritePath方法重写url地址。
    HttpApplication.BeginRequest += new EventHandler(HttpApplication_BeginRequest);
}

void HttpApplication_BeginRequest(object sender, EventArgs e)
{
    HttpApplication Application = (HttpApplication)sender;
    HttpContext context = Application.Context;

    string path = Application.Request.Url.PathAndQuery;
    //因为url中的#有着特殊的意思,它代替页面将跳转到指定的锚文本上。所以在没有锚文本的情况下,是不应该出现#符号的。
    if (path.Contains("#"))
    {
        context.RewritePath("/出错页面");
    }

    bool isEncode = false;
    if (!path.Contains("%"))
    {
        foreach (Pair p in EncodeList)
        {
            if (path.Contains(p.First.ToString()))
            {
                path = path.Replace(p.First.ToString(), p.Second.ToString());
                isEncode = true;
            }
        }

        if (isEncode)
        {
            context.RewritePath(path);
        }
    }
}

public void Dispose()
{

}


当然,该方法会存在一些缺陷,比如经过RewritePath重写的url地址后会明显加重服务器cpu的负担。还有可能造成页面回发错误。具体解决方法与HttpModule模块的注册请查看本站:
如何通过RewritePath方法重写Url地址实现伪静态
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 72+42=? 的结果(结果是:114)
结  果: