如何从自托管服务器上的http请求消息获取原始URL?

时间:2014-01-20 15:48:25

标签: .net wcf http rest

我正在使用HttpSelfHostServer来托管REST API,我想在底层基础架构解析之前看到客户端请求的实际原始URL。

如果我已正确理解事情: HttpSelfHostServer 使用WCF接受HTTP连接,而后者又使用HttpListener

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

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

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

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

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

  • a?b应代表?b
  • 资源上的查询a
  • a%3fb应代表名为a?b
  • 的资源

在使用 HttpSelfHostServer 或任何其他关于如何区分这两个请求的想法时,如何查看实际原始网址的任何帮助都会受到极大关注。

支持此类命名的REST API的一个很好的示例是Windows Azure中的Get Blob API:

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

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

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

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

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

如果有人确认在使用 HttpSelfHostServer 时确实无法检索请求的原始网址,那将会很有帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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