0

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

这里的问题是我所拥有的ProcessMessage()只是SoapMessage, 而我需要添加一个自定义 http 标头。

我试过这样做:

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

但它不起作用。

4

1 回答 1

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>
    
于 2013-04-25T09:40:21.307 回答