4

C#を使用してHTTPヘッダーを変更しようとしました。Request.Headers onPagepreinitイベントを操作しようとしました。しかし、ヘッダーに何かを設定しようとすると、PlatformNotSupportedExceptionが発生します。新しいNameValueCollectionをReqeust.Headersに設定できないため、次のコードを使用して値を設定しようとしました。

Request.Headers.Set(HttpRequestHeader.UserAgent.ToString(), "some value");

これをどのように達成できるか考えていますか?

4

2 に答える 2

11

これを試して:

HttpContext.Current.Request.Headers["User-Agent"] = "Some Value";

編集: これはあなたの理由かもしれません:http: //bigjimindc.blogspot.com/2007/07/ms-kb928365-aspnet-requestheadersadd.html

その中には、Request.Headersに新しいヘッダーを追加するコードスニペットがあります。Windows732ビットOSでも検証済み。

ただし、次の行を置き換えることをお勧めします。

HttpApplication objApp = (HttpApplication)r_objSender;

と:

HttpApplication objApp = (HttpApplication)HttpContext.Current.ApplicationInstance;

編集: 既存のヘッダー値を置き換えるには、次を使用します。

t.InvokeMember("BaseSet", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, headers, new object[] { "Host", item });

ここで、「ホスト」はヘッダー名です。

于 2010-10-20T06:30:45.780 に答える
3

リンクされたブログから完全な(機能する)コードを追加する-ブログが消えた場合

HttpApplication objApp = (HttpApplication)HttpContext.Current.ApplicationInstance;
HttpRequest Request = (HttpContext)objApp.Context.Request;

//get a reference
NameValueCollection headers = Request.Headers;

//get a type
Type t = headers.GetType();
System.Collections.ArrayList item = new System.Collections.ArrayList();

t.InvokeMember("MakeReadWrite",BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,null,headers,null);
t.InvokeMember("InvalidateCachedArrays",BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,null,headers,null);
item.Add("CUSTOM_HEADER_VALUE");
t.InvokeMember("BaseAdd",BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,null,headers, new object[]{"CUSTOM_HEADER_NAME",item});
t.InvokeMember("MakeReadOnly",BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,null,headers,null);
于 2012-11-09T11:25:52.393 に答える