Получение ошибки 400/404 - HttpUtility.UrlEncode не кодирует полную строку?

Почему следующие URL-адреса дают мне IIS ошибки ниже:

A) 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 ()

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-адреса? Есть ли функция, которую кто-то написал, чтобы сделать это правильно?

РЕДАКТИРОВАТЬ:

Я написал свой собственный кодировщик:

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-адресе.

8
задан Justin808 5 January 2011 в 01:54
поделиться