我知道這個答案是晚了大約2年半,但我找不到在UrlReferrer
屬性徹底寫出來,所以我想我會在這裏添加此信息。 @ MarcGravell的答案大部分都是正確的,但它錯過了另外一種可能性。 HTTP標頭中指定的引薦來源的值也可能是無效的URI。
因此,在HttpRequest
上使用UrlReferrer
屬性時應該小心。如果您查看UrlReferrer
使用類似ILSpy的方式調用時執行的代碼,您會看到它試圖解析請求頭中的值。如果該標題中的值不是有效的URI,則會得到System.UriFormatException
。
這意味着如果在嘗試訪問AbsoluteUri
之前簡單檢查UrlReferrer
,如果引用鏈接不是有效的URI,可能會導致未處理的異常。如果您需要有效的Uri
或null
,則必須先使用Request.ServerVariables["HTTP_REFERER"]
,然後使用Uri.TryParse
,否則您必須將Request.UriReferrer == null
支票換成try-catch
。
我整理了一個快速演示,以顯示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
下運行,然後再嘗試使用PowerShell和無效的Uri稱其爲引用:
> $client = new-object System.Net.WebClient
> $client.Headers.Add("Referer", "http://www%2etest%2e.com/test.html")
> $client.DownloadString("http://localhost/urlreferrertest.aspx")
如果通過步驟您將看到代碼Request.UrlReferrer
引發異常,並且http://www%2etest%2e.com/test.html
通過訪問ServerVariable
返回。
我想你可以使用'Request.UrlReferrer'。 – yogi 2012-08-09 07:18:37
沒有理由對一個合法的問題進行倒票。這裏所做的事似乎很愚蠢,但這並不能使問題變得無效。 – cjbarth 2013-02-04 17:51:05