记”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。

原文地址:https://www.cnblogs.com/ants/p/3408903.html