asp.net中的ResolveUrl 完美解决方案

简介:

 根据我个人使用ASP.NET的经验,和通过在网上搜索。我发现,Page的ResolveUrl方法给我们带来了一些比较严重的问题。

     最常见的问题是在页面或控件以外的范围不能使用它。

     其他的问题都是bug。如它不能正确处理一些你给的URL。例如,尝试 Page.ResolveUrl("~/test.aspx?param=http://www.test.com")。结果与你输入字符串相同,没做任何变动。使用Reflector查看asp.net代码,我发现将相对URL转换为绝对URL机制都是先搜索string中的 "://",如果找到,就直接返回了。因此,如果你传递一个带://的参数,查询字符串就是OK的。我们都知道的查询字符串参数应进行urlencode,但如果没有,它应该仍然是可以接受URL。严重的是,要检查您的浏览器。

   网上,建议的方法是使用VirtualPathUtility.ToAbsolute,如果你在传递URL作为查询字符串,这是相当不错和方便的,...否则,就会引发异常。如果是一个绝对URL,它也会抛出异常!
   所以,我决定寻求一个最终解决方案。

   首先,我要找搜索一个很好的变量,它能给我们在应用程序运行时的虚拟路径,不使用页面上下文。

   我使用了HttpRuntime.AppDomainAppVirtualPath。它能在任何地方使用-甚至在timer callback中!它没有尾随斜线路径,ASP.NET作了特素处理,消除斜杠,不过,我们能修复它:-)

   然后,我使用原ResolveUrl代码做了一些测试,找到怎么用AppVirtualPath取代:

1、当URL以斜线开始(/或\),也不会改动它!

2、当URL以〜/开始,它会被AppVirtualPath取代。

3、当URL是一个绝对URL,也不会改变它

4、在任何其他情况下(甚至以〜开始,而不是斜杠),将追加URL到AppVirtualPath。

5、每当它修改URL,还修复斜杠。删除双斜线,用/替换\。

代码:

代码

     在完成代码后和比较原来ResolveUrl测试一遍又一遍,我开始测试性能...在大多数情况下,我的代码执行速度比原来快ResolveUrl 2.7倍!我也在循环内部进行测试,用不同的URL执行代码100000次。

参考原文:http://www.codeproject.com/KB/aspnet/resolveurl.aspx

 







本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/01/22/1654042.html,如需转载请自行联系原作者

相关文章
|
4月前
|
网络协议 Java Linux
Java 异常 java.net.UnknownHostException 的原因和解决方案
Java 异常 java.net.UnknownHostException 的原因和解决方案
623 0
|
开发框架 .NET 数据库连接
win2016下asp无法连接access的解决方案
win2016下asp无法连接access的解决方案
380 0
win2016下asp无法连接access的解决方案
|
2月前
|
Windows
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
222 0
|
5月前
|
消息中间件 存储 NoSQL
.NET开源的处理分布式事务的解决方案
.NET开源的处理分布式事务的解决方案
|
6月前
|
SQL 监控 NoSQL
一个.Net Core开发的,撑起月6亿PV开源监控解决方案
一个.Net Core开发的,撑起月6亿PV开源监控解决方案
30 0
|
7月前
|
Kubernetes 监控 网络协议
【K8S系列】Weave Net 故障排除的常见问题和解决方案
【K8S系列】Weave Net 故障排除的常见问题和解决方案
91 0
|
测试技术
JMeter java.net.URISyntaxException:Illegalcharacterinquery解决方案
JMeter java.net.URISyntaxException:Illegalcharacterinquery解决方案
179 0
|
测试技术
JMeter java.net.SocketException:Operationnotsupported:connect解决方案
JMeter java.net.SocketException:Operationnotsupported:connect解决方案
252 0
|
消息中间件 SQL 开发框架
.NET Core 事件总线,分布式事务解决方案:CAP
.NET Core 事件总线,分布式事务解决方案:CAP
.NET Core 事件总线,分布式事务解决方案:CAP
|
机器学习/深度学习 人工智能 算法框架/工具
医学图像分割模型U-Net介绍和Kaggle的Top1解决方案源码解析
医学图像分割模型U-Net介绍和Kaggle的Top1解决方案源码解析
240 0
医学图像分割模型U-Net介绍和Kaggle的Top1解决方案源码解析