C# HttpContext.Current.Request.ServerVariables[";HTTP\u REFERER";]null

C# HttpContext.Current.Request.ServerVariables[";HTTP\u REFERER";]null,c#,asp.net,C#,Asp.net,我正在尝试使用以下代码在global.asax session_start中获取引用url: HttpContext.Current.Request.ServerVariables["HTTP_REFERER"] 我尝试使用Request.urlreferer.AbsoluteUri,但urlreferer也为空 但是我正在变空。你能告诉我什么是错误的或替代方案吗?不是所有的用户代理都会发送推荐人,一些代理/中介会删除推荐人,而且通常情况下,没有推荐人 只需在某个时刻检查Request.url

我正在尝试使用以下代码在global.asax session_start中获取引用url:

HttpContext.Current.Request.ServerVariables["HTTP_REFERER"]
我尝试使用
Request.urlreferer.AbsoluteUri,但urlreferer
也为空

但是我正在变空。你能告诉我什么是错误的或替代方案吗?

不是所有的用户代理都会发送推荐人,一些代理/中介会删除推荐人,而且通常情况下,没有推荐人

只需在某个时刻检查
Request.urlReferer==null
;如果是,不要尝试查看
Request.urlReferer.AbsoluteUri


这里没有什么“错误”,你也无能为力。如果你不知道他们从哪里来,你就只能忍受了。

我知道这个答案晚了大约2年半,但我找不到关于
urlreferer
属性的详细说明,所以我想在这里添加这些信息@MarcGravel的答案在很大程度上是正确的,但它忽略了另一种可能性。HTTP头中指定的referer值也可能是无效的uri

因此,在使用
HttpRequest
上的
urlreferer
属性时应小心。如果查看在使用类似ILSpy的东西调用
urlReferer
时执行的代码,您将看到它试图解析来自请求头的值。如果该标头中的值不是有效的uri,您将得到一个
System.UriFormatException

这意味着,在尝试访问
绝对uri
之前,只需检查
urlreferer
是否为null,就可以在referer不是有效uri的情况下留下未处理的异常。如果您想要一个有效的
Uri
null
,则必须使用
Request.ServerVariables[“HTTP\u REFERER”]
,然后使用
Uri.TryParse
,或者必须包装
请求。urireferer==null
签入
try catch

我制作了一个快速演示来展示
urlreferer
属性的行为。以下页为例:

<%@ 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>

如果您单步查看代码,您将看到对
Request.urlReferer
的调用引发异常,而那
http://www%2etest%2e.com/test.html
通过访问
ServerVariable

返回。我想您可以使用
Request.UrlReferrer
来进行此操作。没有理由否决合法问题的投票。在这里所做的事情可能看起来很愚蠢,但这并没有使这个问题变得不正确。
> $client = new-object System.Net.WebClient
> $client.Headers.Add("Referer", "http://www%2etest%2e.com/test.html")
> $client.DownloadString("http://localhost/urlreferrertest.aspx")