Request.Headers [“Referer”]不存在

时间:2017-12-05 17:26:55

标签: c# asp.net-core-mvc asp.net-core-webapi

我有两个ASP.NET Core MVC项目的解决方案。一个项目(Client)正在使用Server向另一个项目(HttpClient)发出请求。当Server中的操作收到请求时,我想获取发送它的内容的URL。我读过的每篇文章都称Request.Headers["Referer"]为解决方案,但在我的情况下,Headers不包含“referer”键(或“referrer”)。

Server收到请求后,我该如何找到发送该请求的Client的网址?

2 个答案:

答案 0 :(得分:3)

这就是你如何获得请求的引用网址。但是引用者不是发送请求的东西。当一个人点击一个网站的链接去另一个网站时,浏览器会在标题中设置引用者。当浏览器向新网站发出请求时,请求通常会包含Referer标头,该标头将包含先前网站的网址。

接收服务器无法获取发出请求的“客户端”的URL,请记住典型的Web浏览器客户端不在任何URL。所有接收服务器通常都可以获得客户端的IP地址。

由于您可以控制客户端软件,因此您可以让客户端在将请求发送到服务器之前将所需的任何信息放入请求的标头中,然后服务器就可以从标头中获取该信息。

答案 1 :(得分:2)

如果您正在使用HttpClient,那么由发出请求的网站来添加该标头。在这种情况下,它不会自动添加。因此:更改代码 - 或请求更改代码 - 以便添加您期望的标头和值。如果您通过请求进行代理,则可以从当前请求的 Referer标头中获取值,然后添加该值。

即使在浏览器的一般情况下,将请求作为正常页面循环的一部分,您也不能依赖它:Referer标题通常是故意的发送;取决于浏览器版本,配置,是否在不同域之间进行,是否为HTTPS,以及rel上的<a href=...标记,例如&#34; noreferrer&#34;