似乎在.NET 3.5及更低版本以及ASP.NET中,以下URL是未转义的。有办法避免这种行为吗?
var strUrl = "https://url.com/file%2F.pdf";
var uri = new Uri(strUrl);
var strUri = uri.ToString();
if (strUrl != strUri)
{
throw new Exception("bug!"); // Happens in below .NET 4
}
答案 0 :(得分:0)
这种行为上的变化(尽管很小)仍然是一个重大变化,这意味着它永远不会在将来的3.5版本中得到修复(是,3.5 SP1 is still under support)。
要解决此问题,您要么必须实施自定义解决方法,要么找到可以为您解决的库或程序包,或者升级到新的.NET版本。
答案 1 :(得分:0)
您可以在将其传递给URI之前使用html解码
答案 2 :(得分:0)
我使用以下代码使用反射找到了.NET 3.5的解决方案:
if (strUrl != uri.ToString())
{
var fm_Info = typeof(Uri).GetField("m_Info", BindingFlags.NonPublic | BindingFlags.Instance);
var m_Info = fm_Info.GetValue(uri);
var tUriInfo = typeof(Uri).GetNestedType("UriInfo", BindingFlags.NonPublic |
BindingFlags.Instance);
var fString = tUriInfo.GetField("String");
fString.SetValue(m_Info, strUrl);
}
理想情况下,升级.NET版本将是最好的解决方案,但是对于那些不能这样做的人,这可能会有帮助。