我正在使用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 时确实无法检索请求的原始网址,那将会很有帮助。
答案 0 :(得分:0)
在进一步调查之后,我得出的结论是,无法看到原始网址。
这很不幸,因为底层HttpListenerRequest的RawUrl属性具有我正在寻找的确切值。
如果有人确认在使用HttpSelfHostServer时实际上无法检索请求的原始URL,那将会很有帮助。