【问题标题】:Change the Uri of a instance of HttpWebRequest?更改 HttpWebRequest 实例的 Uri?
【发布时间】:2011-02-16 10:29:50
【问题描述】:

我有一个在事件中拦截的 HttpWebRequest 实例。 我想在发送请求之前编辑 url,但我找不到这样做的方法。 RequestUri 属性是只读的。

我想了几种方法,但似乎找不到可行的解决方案: - 使用反射来设置值? - 创建一个新请求,然后克隆所有属性。不知道该怎么做。

【问题讨论】:

  • 我认为你的做法是错误的。如果您必须诉诸各种技巧和反思,那么您应该清楚您需要重新考虑您的设计/方法。为什么 HttpWebRequest 首先获取错误的 url?在涉及 HttpWebRequest 之前,您可能需要一个中间步骤来解决这个问题。
  • 同意,但不幸的是我无法控制 HttpWebRequest 的创建。我正在使用从 linq 查询生成 HttpWebRequest 的 DataServiceContext。

标签: c# .net httpwebrequest uri


【解决方案1】:

如果从 HTTP 协议的角度考虑,每个请求都是无状态的/唯一的。将一个请求链接到另一个请求的唯一方法是以编程方式通过 Cookie 之类的东西,但对于 HTTP 协议本身,请求是唯一的。

我认为 HttpWebRequest 对象的设计考虑到了这一点。每个 HttpWebRequest 代表一个对 URL 的唯一调用,您为该调用构建参数。如果您想对不同的 URL 发出另一个请求,您将创建一个新的 HttpWebRequest 并将您正在使用的状态信息传递给它,即:Cookie 容器、标头信息等。

对此的冗长答案是对象被设计为具有只读 url,处理它的唯一方法是:

  1. 如果您绝对需要使用给定的 HttpWebRequest 对象,请使用一些反射技巧,例如您已经做过的。

  2. 创建一个新的 HttpWebRequest (WebRequest.Create()) 并将您的状态信息复制到新请求中。

【讨论】:

    【解决方案2】:

    您可以使用RewritePath 来执行此操作。

    F.e.

    HttpContext.Current.RewritePath("newurl.aspx");
    

    【讨论】:

    • 这是一个 HttpRequest 对象。我说的是 HttpWebRequest。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多