在ASP.NET中获取HTTP Referrer

Chu*_*utt 98 c# asp.net http-referer http http-headers

我在寻找获得浏览器的快捷,方便和可靠的方式HTTP推荐ASP.Net(C# ).我知道HTTP推荐本身是不可靠的,但我确实希望得到引荐,如果它的可靠方法存在.

Dar*_*rov 162

您可以使用当前请求的UrlReferrer属性:

Request.UrlReferrer
Run Code Online (Sandbox Code Playgroud)

这将从请求中读取Referer HTTP头,该头可能由客户端(用户代理)提供,也可能不提供.

  • 应该注意的是,如果引用HTTP标头格式错误,则此属性将抛出System.UriFormatException. (8认同)
  • 如果在服务器端回发后使用`Request.UrlReferrer`,请小心.当然`Request.UrlReferrer`现在将具有您要发回的页面的值.在大多数情况下,人们需要上一页.在这种情况下,请确保在首次加载页面时将前一页存储在一个viewstate变量中.然后,当您访问此变量时,它具有您来自的上一页.例如,在asp.net表单页面加载事件中你可以这样做:`if(Request.UrlReferrer!= null)ViewState ["PreviousPageUrl"] = Request.UrlReferrer.ToString();` (8认同)
  • ...例如,当你回发时,你可以这样做:`Response.Redirect(ViewState ["PreviousPageUrl"]!= null?ViewState ["PreviousPageUrl"].ToString():"SomeOtherPage.aspx");` (4认同)

Dis*_*ile 19

使用该Request.UrlReferrer属性.

在幕后它只是检查ServerVariables("HTTP_REFERER")财产.

  • 我可以告诉你`ServerVariables ["HTTP_REFERER"]`返回一个*string*,而`Request.UrlReferrer`返回一个*Uri*. (13认同)
  • 所以如果我使用的话就不会有任何不同:HttpContext.Current.Request.ServerVariables ["HTTP_REFERER"]? (2认同)
  • 理论上没有区别,在实践中我无法肯定地说,因为反射器的快速查看表明`UrlReferrer`不仅仅是对`ServerVariables("HTTP_REFERER")的简单调用. (2认同)

Nig*_*888 16

Request.Headers["Referer"]
Run Code Online (Sandbox Code Playgroud)

说明

如果引用HTTP标头格式错误(这可能发生,因为它通常不在您的控制之下),Request.UrlReferer将抛出一个System.UriFormatException.

至于使用Request.ServerVariables,按MSDN:

Request.ServerVariables集合

ServerVariables集合检索预定环境变量的值并请求标头信息.

Request.Headers Property

获取HTTP标头的集合.

Request.Headers是一个更好的选择Request.ServerVariables,因为Request.ServerVariables包含所有环境变量以及标题,其中Request.Headers是一个只包含标题的更短的列表.

所以最好的解决方案是使用Request.Headers集合直接读取值.如果要在表单上显示该值,请注意Microsoft关于HTML编码值的警告.

  • 请注意,“Referer”标头的拼写与“HTTP_REFERRER”服务器变量的拼写不同。 (2认同)

Tom*_*Tom 13

像这样:HttpRequest.UrlReferrer属性

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
Run Code Online (Sandbox Code Playgroud)

  • 为了防止null,你可以说:string actual =""+ Request.UrlReferrer ?? "(默认)"; //(默认)可以是空字符串 (2认同)

Ser*_*gan 9

由于Google在搜索C# Web API Referrer此处的交易时会将您带到此帖:Web API使用不同类型的Request正常MVC Request调用HttpRequestMessage(不包括)UrlReferrer.由于正常Web API请求不包含此信息,因此如果您确实需要此信息,则必须让您的客户不遗余力地将其包含在内.虽然您可以将其作为您的一部分API Object,但更好的方法是使用Headers.

首先,您可以扩展HttpRequestMessage以提供一种UrlReferrer()方法:

public static string UrlReferrer(this HttpRequestMessage request)
{
    return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}
Run Code Online (Sandbox Code Playgroud)

然后您的客户需要设置Referrer HeaderAPI Request:

// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
Run Code Online (Sandbox Code Playgroud)

现在,Web API Request包含您可以从以下方式访问的引荐来源数据Web API:

Request.UrlReferrer();
Run Code Online (Sandbox Code Playgroud)


Saa*_*san 8

我正在使用.Net Core 2 mvc,这个适用于我(获取预览页面):

HttpContext.Request.Headers["Referer"];
Run Code Online (Sandbox Code Playgroud)