Asp.NET 1.1 HttpResponse заголовки - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть часть проекта Asp.NET 1.1.

Я работаю с удаленным сайтом, который в некоторых случаях работает некорректно - иногда он пишет неправильный заголовок Content-Encoding.

В моем коде я получаю HttpResponse с этого удаленного сайта. И если заголовок Content-Encoding равен, например, "gzip", мне нужно установить заголовок Content-Encoding на "deflate".

Но в классе HttpResponse нет свойств или методов для получения заголовка Content-Encoding.

Свойство Content-Encoding возвращает, в моем случае, «UTF-8». В окне Watch я вижу поле _customProperties, которое содержит неверное строковое значение. Как я могу изменить значение заголовка с Asp.NET 1.1 ?

1 Ответ

0 голосов
/ 13 апреля 2010

В Asp.NET 1.1 нет способа изменить пользовательские заголовки.

Я решаю проблему только с помощью отражения.

// first of all we need get type ArrayList with custom headers:
Type responseType = Response.GetType();
ArrayList fieldCustomHeaders = ArrayList)responseType.InvokeMember("_customHeaders",BindingFlags.GetField|BindingFlags.Instance|BindingFlags.NonPublic, null, Response,null);

// next we go thru all elements of list and search our header
for(int i=0; i < fieldCustomHeaders.Count; i++)
{
    // see all headers
    PropertyInfo propHeaderName = fieldCustomHeaders[i].GetType().GetProperty("Name", BindingFlags.Instance|BindingFlags.NonPublic); 

    String headerName = (String)propHeaderName.GetValue(fieldCustomHeaders[i], null);

    // if we find needed header
    if(headerName == "Content-Encoding")
    {
        // get value of header from its field
        FieldInfo fieldHeaderValue = _fieldCustomHeaders[i].GetType().GetField("_value", BindingFlags.Instance|BindingFlags.NonPublic); 

        String headerValue = (String)fieldHeaderValue.GetValue(fieldCustomHeaders[i]);

        // if we find needed value 
        if (headerValue == "gzip")
        {
            // just set new value to it
            fieldHeaderValue.SetValue(_fieldCustomHeaders[i], "deflate");   
        break;
        }
     }                  
}
...