如何在c#中使用SoapExtension将自定义HTTP标头添加到asmx调用

时间:2013-02-13 09:58:17

标签: asmx

我试图通过在c#中扩展ProcessMessage类来使用SoapExtension(SoapMessage消息)拦截它来为asmx调用添加自定义HTTP标头。

这里的问题是ProcessMessage()中的所有内容都是SoapMessage,而我需要添加自定义http标头。

我试过这样做:

HttpContext.Current.Request.Headers.Add("X-MyHeader", "xyz"); 

但它不起作用。

1 个答案:

答案 0 :(得分:0)

我使用以下步骤解决了这个问题:

  1. 使用类

    构建程序集
    namespace HttpWebRequestTest {
        public class CustomHttpRequestCreator : IWebRequestCreate         
        public CustomHttpRequestCreator() { }
        public WebRequest Create(Uri uri) {
            HttpWebRequest webRequest = Activator.CreateInstance(typeof(HttpWebRequest),
                                        BindingFlags.CreateInstance | BindingFlags.Public |
                                        BindingFlags.NonPublic | BindingFlags.Instance,
                                        null, new object[] { uri, null }, null) as HttpWebRequest;
    
    
            webRequest.Headers.Add("MyHeader:MyValue");
            return webRequest;
        }
       }
     }
    
  2. 将文件添加到GAC并在web.config中注册

    <system.net>
     <webRequestModules>
      <remove prefix="http:"/>
      <remove prefix="https:"/>
      <add prefix="http:" type="HttpWebRequestTest.CustomHttpRequestCreator, HttpWebRequestTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2bc4ccb2cdedce53" />
      <add prefix="https:" type="HttpWebRequestTest.CustomHttpRequestCreator, HttpWebRequestTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2bc4ccb2cdedce53" />
     </webRequestModules>
    </system.net>