因为您使用的是 .NET 3.5,所以您使用的是程序集,该程序集存在被此方法视为非法路径字符2.0
System.Web
的缺陷。这在特定于版本的 MSDN 页面?
上的社区评论中有所提及。
通过反汇编可以看出,调用以 ( internal
)结尾VirtualPath.Create
,其中有:
else if (VirtualPath.ContainsIllegalVirtualPathChars(virtualPath))
{
throw new HttpException(System.Web.SR.GetString("Invalid_vpath", new object[1]
{
(object) virtualPath
}));
}
其中引用
private static char[] s_illegalVirtualPathChars = new char[4]
{
':',
'?',
'*',
char.MinValue
};
其中一些可以合理地被视为路径的坏字符,但?
不应该被如此拒绝。
已被重写的4.0
System.Web
节目的拆卸更加挑剔。VirtualPath.Create
这个 web.archive 捕获的一篇现已失效的 blogs.msdn 帖子显示了最早提到这个问题的地方之一。MS 员工回应:
2006 年 2 月 26 日,星期日,晚上 11:49,作者:DmitryR 例外~/path?qs
是我需要修复的错误...
最简单的解决方法是
ResolveAppRelativeLinkToUrl
在调用
VirtualPathUtility.ToAbsolute
.
一种解决方法是使用完全限定的 UTL,而不是“~/...”。
谢谢,
德米特里
whereResolveAppRelativeLinkToUrl
指的是报告者代码的方法名称。
另一种解决方法是?
在调用 之前用安全令牌VirtualPathUtility.ToAbsolute
替换,然后撤消替换:
public static string SafeToAbsolute(string path)
{
var madeSafe = path.Replace("?", "UNLIKELY_TOKEN");
var absolute = VirtualPathUtility.ToAbsolute(madeSafe);
var restored = absolute.Replace("UNLIKELY_TOKEN", "?");
return restored;
}
为您的应用程序选择合适的不太可能的令牌。