0

私は Asp.NET 1.1 プロジェクトの一部を持っています。

私はリモートサイトで作業していますが、場合によっては正しく動作しません - 間違った Content-Encoding ヘッダーを書き込むことがあります。

私のコードでは、このリモート サイトから HttpResponse を取得します。Content-Encoding ヘッダーが "gzip" のように等しい場合、Content-Encoding ヘッダーを "deflate" に設定する必要があります。

ただし、HttpResponse クラスには、Content-Encoding ヘッダーを取得するためのプロパティやメソッドはありません。

私の場合、 Content-Encoding プロパティは「UTF-8」を返します。ウォッチ ウィンドウに、間違った文字列値を含む _customProperties フィールドが表示されます。Asp.NET 1.1でヘッダー値を変更するにはどうすればよいですか?

4

1 に答える 1

0

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;
        }
     }                  
}
于 2010-04-13T10:03:42.783 に答える