gpt4 book ai didi

c# - 使用 System.Net.WebRequest 时无法设置某些 HTTP header

转载 作者:IT王子 更新时间:2023-10-29 03:33:23 27 4
gpt4 key购买 nike

当我尝试在 WebRequest 对象上添加 HTTP header 键/值对时,出现以下异常:

This header must be modified using the appropriate property

我已经尝试使用 Add() 方法向 Headers 集合添加新值,但我仍然遇到相同的异常。

webRequest.Headers.Add(HttpRequestHeader.Referer, "http://stackoverflow.com");

我可以通过将 WebRequest 对象转换为 HttpWebRequest 并设置诸如 httpWebReq.Referer ="http://stackoverflow.com" 之类的属性来解决这个问题,但这只适用于少数人通过属性公开的 header 。

我想知道是否有一种方法可以更精细地控制通过请求远程资源修改 header 。

最佳答案

如果您需要简短的技术答案,请直接转到答案的最后一部分。

如果您想了解得更多,请阅读所有内容,希望您会喜欢...


我今天也反驳了这个问题,今天发现的是:

  1. 以上答案都是正确的,因为:

    1.1 它告诉您您要添加的 header 已经存在,然后您应该使用适当的属性(例如索引器)修改它的值,而不是再次尝试添加它。

    1.2 任何时候您要更改 HttpWebRequest 的 header ,您都需要在对象本身上使用适当的属性(如果存在)。

感谢 FOR 和 Jvenema 的领先指南...

  1. 但是,我发现,那是拼图中缺失的部分是:

    2.1 WebHeaderCollection类一般通过WebRequest.Headers或者WebResponse.Headers来访问。 一些常见的 header 被认为是受限制的,要么直接由 API 公开(例如 Content-Type),要么受系统保护且无法更改。

受限制的 header 是:

  • 接受
  • 连接
  • 内容长度
  • 内容类型
  • 日期
  • 期待
  • 主持人
  • If-Modified-Since
  • 范围
  • 推荐人
  • 传输编码
  • 用户代理
  • 代理连接

所以,下次当你遇到这个异常并且不知道如何解决这个问题时,请记住有一些受限的 header ,解决方案是使用 WebRequest< 中的适当属性显式修改它们的值/HttpWebRequest 类。


编辑:(有用,来自评论,用户评论Kaido)

Solution is to check if the header exists already or is restricted (WebHeaderCollection.IsRestricted(key)) before calling add

关于c# - 使用 System.Net.WebRequest 时无法设置某些 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/239725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com