zoukankan      html  css  js  c++  java
  • 记”Uri.IsWellFormedUriString”中的BUG

    场景

    先上逻辑代码

       1: /// <summary>
       2: /// 图片真实地址
       3: /// </summary>
       4: public string FullImagePath
       5: {
       6:     get
       7:     {
       8:         _fullImagePath = ImagePath;
       9:         if (string.IsNullOrWhiteSpace(_fullImagePath))
      10:             return _fullImagePath;
      11:         if (
    Uri
    .IsWellFormedUriString(_fullImagePath, UriKind.RelativeOrAbsolute))
      12:             return _fullImagePath;
      13:         if (_fullImagePath.StartsWith("~/"))
      14:         {
      15:             return _fullImagePath.Remove(0, 2).Insert(0, HttpContext.Current.Request.ApplicationPath);
      16:         }
      17:         return _fullImagePath;
      18:     }
      19: }

    这边提供了一个FullImagePath的属性,用来解析最终的图片路径,其中ImagePath属性值格式为:”~/xxx/xx/xx.jpg”这边需要做的就是把~/解析为服务器路径。

    在进行解析之前用了”Uri.IsWellFormedUriString”方法用来判断Url是否合法,如果合法则不进行转换。该方法的说明如下:通过尝试用字符串构造一个 URI 来指示字符串是否为格式良好的,并确保字符串不需要进一步转义。

    方法说明如下:

    image

    这边问题出现了,在正式环境上该方法会把带有”~/”开头的Url验证为True,而在本地(本人的开发机器上)带有”~/”开头的Url会返回False。

    解决办法

    这边采用的是第二种办法,因为这种可以简单实现的逻辑不必去要求服务器打补丁。

    1.打上.net framework补丁

    具体什么补丁我也没细查,也因为是前段时间的事情今天才写所以也不太好排查,有朋友知道的可以回复一下。

    2.修改逻辑

    可以把这段验证去掉。

    结语(大家可以不看,没营养)

    最近换了工作一切皆需要调整,所以有一段时间没有写Blog了,但后面会尽量写一些东西,其实心底已经有好几个点想写了,比如:Autofac中可能会引发内存泄漏的问题,EF不当操作引起的内存泄漏等等等等,一切都怪时间啊,今天也是趁着装环境的时候顺便上来写了一些。最后的最后大家和谐讨论,想大家不要钻牛角尖去纠结什么代码逻辑,纠结什么HttpContext.Current之类的东西,主要是分享一下这个BUG。

  • 相关阅读:
    C#中的委托,匿名方法和Lambda表达式
    Java 8 Lambda表达式探险
    Lambda表达式有何用处?如何使用?
    有参数的程序,可以被调用
    怎样用VB编写.DLL动态链接库文件
    Oracle 存储过程包
    EB(存储单位)
    排序之快速排序(上)
    排序之冒泡排序
    排序之堆排序
  • 原文地址:https://www.cnblogs.com/ants/p/3408903.html
Copyright © 2011-2022 走看看