Почему следующие URL дают мне ошибки IIS ниже:
А) http://192.168.1.96/cms/View.aspx/Show/Small+test'
A2) http://192.168.1.96/cms/View.aspx/Show/Small%20test' <- это работает, но не является результатом HttpUtility.UrlEncode () </p>
B) http://192.168.1.96/cms/View.aspx/Show/'%26$%23funky**!!~''+page
Ошибка для 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.
Последняя часть URL после / Show / является результатом после отправки текста через HttpUtility.UrlEncode (), поэтому, по мнению Microsoft, это URL, закодированный правильно.
Если я использую HttpUtility.UrlPathEncode (), а не HttpUtility.UrlEncode (), я получаю результаты A2. Но B в конечном итоге выглядит как:
http://192.168.1.96/TVCMS-CVJZ/cms/View.aspx/Show/'&$#funky**!!~''%20page
что все еще неправильно. Microsoft знает, как URL Encode вообще? Есть ли функция, которую кто-то написал, чтобы сделать это правильно?
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
Но, хотя это выглядит как хороший действительный URL-адрес, IIS все же дает мне
Ошибка HTTP 400.0 - неверный запрос
ASP.NET обнаружил недопустимые символы в URL.