代码之家  ›  专栏  ›  技术社区  ›  Amit

如何使用C#修改请求的HTTP头?

  •  4
  • Amit  · 技术社区  · 15 年前

    我试图使用C#修改HTTP头。我试图操作页面preinit事件上的Request.Headers。但是当我试图设置任何标题时,我得到PlatformNotSupportedException。由于无法将新的NameValueCollection设置为requeust.Headers,因此我尝试使用以下代码设置该值:

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

    2 回复  |  直到 15 年前
        1
  •  11
  •   Kay    15 年前

    试试这个:

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

    编辑: http://bigjimindc.blogspot.com/2007/07/ms-kb928365-aspnet-requestheadersadd.html

    其中有一个代码段,用于向Request.Headers添加新的头。已在Windows 7 32位操作系统上验证。

    但您可能需要替换行:

    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 });
    

        2
  •  3
  •   Paul    13 年前

    添加链接博客的完整(工作)代码-以防博客消失

    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);
    
    推荐文章