记”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 来指示字符串是否为格式良好的,并确保字符串不需要进一步转义。
方法说明如下:
这边问题出现了,在正式环境上该方法会把带有”~/”开头的Url验证为True,而在本地(本人的开发机器上)带有”~/”开头的Url会返回False。
解决办法
这边采用的是第二种办法,因为这种可以简单实现的逻辑不必去要求服务器打补丁。
1.打上.net framework补丁
具体什么补丁我也没细查,也因为是前段时间的事情今天才写所以也不太好排查,有朋友知道的可以回复一下。
2.修改逻辑
可以把这段验证去掉。
结语(大家可以不看,没营养)
最近换了工作一切皆需要调整,所以有一段时间没有写Blog了,但后面会尽量写一些东西,其实心底已经有好几个点想写了,比如:Autofac中可能会引发内存泄漏的问题,EF不当操作引起的内存泄漏等等等等,一切都怪时间啊,今天也是趁着装环境的时候顺便上来写了一些。最后的最后大家和谐讨论,想大家不要钻牛角尖去纠结什么代码逻辑,纠结什么HttpContext.Current之类的东西,主要是分享一下这个BUG。