2015-12-08 151 views
0

我在那有一個API項目,我有2個不同的控制器:Asp.net網頁API獲取請求頭

一個控制器是一個System.Web.Mvc控制器:

公共類HomeController的:控制

在這一點,我有限定象下面的請求:

var request = System.Web.HttpContext.Current.Request; 
       request.Headers.Add("token", "test"); 

一個其它控制器是阿比控制器:

公共類CalendarController:ApiController { 私人字符串_accessToken;

public CalendarController() 
    { 
     IEnumerable<string> accessTokenValues; 

     var request = System.Web.HttpContext.Current.Request; 

     var token = request.Headers.GetValues("token"); 
     //var tokenValues = accessTokenValues as string[] ?? accessTokenValues.ToArray(); 
     //_accessToken = (tokenValues.Any()) ? tokenValues.First() : ""; 
    } } 

我說「令牌」的請求頭,但我不能在API控制器得到它。請幫幫我 ! 謝謝!

+0

誰在調用api端點?調用此api端點的人應該發送標題值。儀式? – Shyju

+0

請詳細解釋。我的代碼首先在HomeController中運行以設置令牌值。然後,我想在Api控制器上獲取它 –

+0

HTTP是無狀態的!你想通過設置標題來實現什麼。你能否詳細說明你的用例? – Shyju

回答

1

始發呼叫者負責設置請求標頭。因此,將第一個請求的頭添加到HomeController意味着它不會被添加到對CalendarController的後續請求中。看看:https://msdn.microsoft.com/en-us/library/bb470252.aspx有關ASP.NET請求響應管道的更多詳細信息。

最終,它取決於您希望如何添加到標頭。

例如,如果服務器端的所有信息都添加到請求標頭中,並且您使用的是OWIN,則可以添加一個自定義中間件層,該層將攔截傳入呼叫並將自定義標頭添加爲(http://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline