为什么以下 URL 会出现以下 IIS 错误:
A) http://192.168.1.96/cms/View.aspx/Show/Small+test http://192.168.1.96/cms/View.aspx/Show/Small+test'
A2) http://192.168.1.96/cms/View.aspx/Show/Small%20test http://192.168.1.96/cms/View.aspx/Show/Small%20test'
B) http://192.168.1.96/cms/View.aspx/Show/ http://192.168.1.96/cms/View.aspx/Show/'%26$%23funky**!!!~''+页面
A 的错误:
HTTP Error 404.11 - Not Found
The request filtering module is configured to deny a request that contains a double escape sequence.
B 的错误:
HTTP Error 400.0 - Bad Request
ASP.NET detected invalid characters in the URL.
/Show/ 之后的 URL 的最后一部分是通过 HttpUtility.UrlEncode() 发送文本后的结果,因此,根据 Microsoft 的说法,它是正确的 URL 编码。
如果我使用 HttpUtility.UrlPathEncode() 而不是 HttpUtility.UrlEncode() 我会得到 A2 结果。但 B 最终看起来像:
http://192.168.1.96/TVCMS-CVJZ/cms/View.aspx/Show/ http://192.168.1.96/TVCMS-CVJZ/cms/View.aspx/Show/'&$#funky**!!~''%20页
这是still错误的。 Microsoft 知道如何进行 URL 编码吗?有人编写了一个函数来以正确的方式执行此操作吗?
EDIT:
我写了自己的编码器:
static public string UrlEncode(string encode)
{
if (encode == null) return null;
string encoded = "";
foreach (char c in encode)
{
int val = (int)c;
if ((val >= 48 && val <= 57) || (val >= 65 && val <= 90) || (val >= 97 && val <= 122))
encoded += c;
else
encoded += "%" + val.ToString("X");
}
return encoded;
}
该函数与上面的 A2 配合得很好,B 的结果是:
http://192.168.1.96/cms/View.aspx/Show/%27%26%24%23funky%2A%2A%21%21~%27%27%20page http://192.168.1.96/cms/View.aspx/Show/%27%26%24%23funky%2A%2A%21%21~%27%27%20page
但即使这看起来像一个不错的有效 URL IISstill给我一个
HTTP 错误 400.0 - 错误请求
ASP.NET 检测到 URL 中存在无效字符。