我正在尝试使用以下代码在global.asax session_start中引用url:
HttpContext.Current.Request.ServerVariables["HTTP_REFERER"]
我尝试使用Request.UrlReferrer.AbsoluteUri but UrlReferrer
也是空的。
但我得到了空。你能告诉我什么是错的或替代的吗?
答案 0 :(得分:6)
并非所有用户代理发送引荐来源,某些代理/中介剥离引荐来源,并且通常只有 没有引荐来源。< / p>
只需检查Request.UrlReferrer == null
是否在某个时刻;如果是,请不要试着查看Request.UrlReferrer.AbsoluteUri
。
这里没有“错误”,你无能为力。如果你不知道他们来自哪里,你就必须忍受它。
答案 1 :(得分:2)
我知道这个答案迟了大约2年半,但我无法在UrlReferrer
属性上找到详细的说明,所以我想我会在这里添加这些信息。 @ MarcGravell的回答在大多数情况下是正确的,但它错过了另一种可能性。 HTTP标头中指定的referrer值也可以是无效的uri。
因此,在UrlReferrer
上使用HttpRequest
属性时应该小心。如果查看使用ILSpy之类的函数调用UrlReferrer
时执行的代码,您将看到它尝试解析请求标头中的值。如果该标头中的值不是有效的uri,您将获得System.UriFormatException
。
这意味着,在尝试访问UrlReferrer
之前简单地检查AbsoluteUri
是否为null,如果引荐来源不是有效的uri,则可能会留下未处理的异常。如果您需要有效的Uri
或null
,则必须使用Request.ServerVariables["HTTP_REFERER"]
然后使用Uri.TryParse
,否则您必须将Request.UriReferrer == null
包裹起来try-catch
{1}}签入UrlReferrer
。
我整理了一个快速演示来展示<%@ Page Language="C#" AutoEventWireup="true" %>
<html><body>
<table border="1">
<tr><td>Referrer</td><td><%= GetUrlReferrer() %></td></tr>
</table>
</body></html>
<script runat="server">
public string GetUrlReferrer()
{
try
{
return Request.UrlReferrer == null ? "(None)" : Request.UrlReferrer.ToString();
}
catch (Exception ex)
{
return Request.ServerVariables["HTTP_REFERER"] + " (from Server Variable)";
}
}
</script>
属性的行为。以下页为例:
http://localhost/urlreferrertest.aspx
将此页面设置为在> $client = new-object System.Net.WebClient
> $client.Headers.Add("Referer", "http://www%2etest%2e.com/test.html")
> $client.DownloadString("http://localhost/urlreferrertest.aspx")
下运行,然后尝试使用无效的Uri从Powershell中调用它来获取引荐来源:
Request.UrlReferrer
如果您单步执行代码,则会发现对http://www%2etest%2e.com/test.html
的调用会引发异常,并且会通过访问ServerVariable
返回{{1}}。