【问题标题】:How to get raw url from http request message on self hosted server?如何从自托管服务器上的 http 请求消息中获取原始 url?
【发布时间】:2014-02-09 20:59:30
【问题描述】:

我正在使用HttpSelfHostServer 托管一个 REST API,我希望在底层基础架构解析之前查看客户端请求的实际原始 url。

如果我理解正确的话:在底层 HttpSelfHostServer 使用 WCF 来接受 HTTP 连接,而后者又使用 HttpListener

HttpListener 将请求表示为 HttpListenerRequest 的实例,该实例具有有希望的 RawUrl 属性,我怀疑它会携带实际的 url(在解析之前)。

但是,我不知道在使用 HttpSelfHostServer 时是否可以访问底层的 HttpListenerRequest

由于我无法访问实际的原始网址,因此以下请求在到达我的代码时具有相同的签名:

  • http://server/a?b
  • http://server/a%3fb

但是,我希望它们代表两种不同的资源:

  • a?b 应该表示对名为 a 的资源的查询 ?b
  • a%3fb 应该代表一个名为 a?b 的资源

任何关于我在使用 HttpSelfHostServer 时如何查看实际原始 url 的帮助或关于如何区分这两个请求的任何其他想法都会非常有用。

支持这种命名的 REST API 的一个很好的例子是 Windows Azure 中的 Get Blob API:

  • http://myaccount.blob.core.windows.net/mycontainer/myblob?timeout=1 使用查询参数 timeout=1 转到名为 myblob 的 blob。

  • http://myaccount.blob.core.windows.net/mycontainer/myblob%3ftimeout=1 转到名为 myblob?timeout=1 的 blob。

我需要在我的 API 中支持类似的命名方案。

在进一步调查之后,我得出的结论是无法查看原始网址。

这很不幸,因为底层 HttpListenerRequestRawUrl 属性具有我正在寻找的确切值。

如果有人能确认在使用 HttpSelfHostServer 时实际上不可能检索请求的原始 url,那将会很有帮助。

【问题讨论】:

    标签: .net wcf http rest


    【解决方案1】:

    在进一步调查之后,我得出的结论是无法查看原始网址。

    这很不幸,因为底层 HttpListenerRequest 的 RawUrl 属性具有我正在寻找的确切值。

    如果有人能确认在使用 HttpSelfHostServer 时实际上不可能检索请求的原始 url,那将会很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-24
      • 2012-01-14
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      相关资源
      最近更新 更多