2010-11-23 62 views
81

我在ASP.NetC#)尋求獲得瀏覽器的HTTP推薦的快速,簡便和可靠的方式。我知道HTTP Referrer本身並不可靠,但我確實需要一種可靠的方式來獲取引用者,如果它目前。獲取HTTP推薦在ASP.NET

+2

[我如何在ASP.NET MVC行動引薦網址?(HTTP的可能重複:// ST ackoverflow.com/questions/1471188/how-do-i-get-the-referrer-url-in-an-asp-net-mvc-action) – 2014-05-29 15:10:45

+0

從Asp.Net核心看到[我怎樣才能在ASP中獲取Url引用.NET Core MVC?](// stackoverflow.com/q/38772394) – 2017-09-21 09:05:51

回答

144

你可以使用UrlReferrer屬性的當前請求的:

Request.UrlReferrer 

這將讀取其可以或可以不被客戶端(用戶代理)提供請求的Referer HTTP標頭。

+7

應該注意的是,如果引用HTTP標頭格式錯誤,該屬性將拋出System.UriFormatException。 – NightOwl888 2014-09-05 20:15:04

+1

@Darin Dimitrov正在嘗試使用WEB API創建REST API。 UrlReferrer不是Request對象的一部分。我應該添加一些「使用」等。我錯過了什麼?一個DLL? – Ravi 2014-11-04 00:21:59

+1

應該指出,差異是拼寫是正確的。 http標題拼寫錯誤。 MS在屬性名稱中使用正確的拼寫。不幸的是,這兩者不匹配,這會在測試時引起一些人(我)的困惑。 – John 2015-09-04 18:23:24

17

使用Request.UrlReferrer屬性。

在幕後,它只是檢查ServerVariables("HTTP_REFERER")屬性。

12
Request.Headers["Referer"] 

說明

Request.UrlReferer將拋出一個System.UriFormatException如果引薦HTTP標頭的格式不正確(這可能發生,因爲它通常不是你的控制之下)。

作爲使用Request.ServerVariables,每MSDN:

Request.ServerVariables集合

的ServerVariables集合中檢索預定的環境變量和請求的報頭信息的值。

Request.Headers物業

獲取HTTP標頭的集合。

Request.HeadersRequest.ServerVariables一個更好的選擇,因爲Request.ServerVariables包含了所有的環境變量,以及頭,其中Request.Headers是隻包含一個標題更短名單。

所以最好的解決方案是使用Request.Headers集合直接讀取值。儘管如此,如果你要在表單上顯示它,請注意微軟對HTML編碼值的警告。

8

由於谷歌把你帶到這個職位C# Web API Referrer搜索時,這裏的交易:Web API使用正常MVC Request不同類型的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; 
} 

然後你的客戶需要設置Referrer Header他們API Request

// Microsoft.AspNet.WebApi.Client 
client.DefaultRequestHeaders.Referrer = new Uri(url); 

而現在Web API Request包括指引者數據您可以像這樣從您的Web API訪問:

Request.UrlReferrer(); 
1
string referrer = HttpContext.Current.Request.UrlReferrer.ToString(); 
0

我使用的.Net睿2 MVC, 這個工作對我來說(獲取預覽頁面):

HttpContext.Request.Headers["Referer"]; 
0

有時你必須給這樣

所有鏈接
System.Web.HttpContext.Current.Request.UrlReferrer.ToString(); 

(在當「當前」不成立選項)