2016-07-19 41 views
1

我有一個帶有Controllers控制器的MVC WebAPI 2項目。我試圖調用的方法是POST(創建)。我需要訪問調用該方法的引用URL,無論我訪問哪個對象,引用URL都不存在於對象中或爲空。Url Referrer在WebApi 2 MVC項目中不可用

例如,我已經添加了HTTPContext參考和下面的返回null

var thingythingthing = HttpContext.Current.Request.UrlReferrer; 

Request對象不具有UrlReferrer屬性。

這將返回空值,以及:

HttpContext.Current.Request.ServerVariables["HTTP_REFERER"] 

我不能修改標題,因爲我需要能夠生成一個鏈接到呼叫的起源的方法和過濾訪問。

任何特定的地方,我應該看看,或者,爲什麼他們返回null的任何特定原因?

編輯:我有一個GET方法(HttpContext.Current.Request.RequestContext.HttpContext.Request.UrlReferrer)的解決方案,但不適用於POST方法。

回答

2

請參閱this answer。基本上,WebAPI請求使用不同類型的請求對象。不過,您可以創建一個擴展方法,爲您提供UrlReferrer。從鏈接答案:

首先,你可以擴展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(); 
+0

在這種情況下,客戶端無法修改標頭,因此我無法將其用於我的目的。我有一個可以使用的解決方法,但它會涉及一箇中間頁面來重定向該呼叫。我並不熱衷於此。另請參閱我的問題編輯; – MetalPhoenix

+0

啊。繼續,然後! –

相關問題