2012-12-18 71 views
1

我想根據HTTP使用MVC調用WebApi方法。我需要每次發送一些信息,例如用戶ID和應用程序版本。我怎樣才能將這個信息添加到頭部?我想這樣做,作爲一個Ajax調用,而不是由客戶端代碼就像現在):如何在服務器端設置WebApi請求標頭

 'beforeSend: function (req) { 
       req.setRequestHeader("Accept", "version=1.00,requestTime=" + new Date()); 
      }' 

但在服務器端,我不能設置RequestHeader用繩子 這是我的服務器代碼:

HttpClient client = new HttpClient(); 
var request = new HttpRequestMessage() 
     { 
      RequestUri = new Uri("http://localhost/WebAPIDemo/FilterAttribute-MVC"), 
      Method = HttpMethod.Get, 
     }; 

     request.Headers.Accept.Add(***); 
     //request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     List<OfficeSupply> os=new List<OfficeSupply>(); 
     var task = client.SendAsync(request) 
      .ContinueWith((taskwithmsg) => 
      { 
       var response = taskwithmsg.Result; 

       var jsonTask = response.Content.ReadAsAsync<List<OfficeSupply>>(); 
       jsonTask.Wait(); 
       var jsonObject = jsonTask.Result; 
       os = jsonObject.ToList(); 
      }); 
     task.Wait(); 

***需要是'MediaTypeWithQualityHeaderValue'類型的值,但我只是想將它設置爲自定義,就像ajax調用一樣。我應該怎麼做?

另外,我想改變頁眉授權參數,但是這個代碼:

'client.DefaultRequestHeaders.Add("Authorization", "12345");' 

沒有工作,

request.Headers.Authorization.Parameter 

告訴我,這是隻讀的。

如何在發送之前在服務器端設置它?

回答

1

你可以做這樣的事情指定自定義的身份驗證方案,

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("scheme","whatever parameters"); 

您可以設置這樣的代碼完全自定義標題:

request.Headers.TryAddWithoutValidation("foo", new List<string>() {"sdadads"}); 

不過要小心,在接受頭示例你上面顯示的是完全無效的。關於如何格式化接受標題的內容以及您的示例無效,有非常準確的規則。

+0

你好!我想你的代碼,但它不不會顯示在Chrome請求標題(F12網絡標題),一切都沒有改變 – Ray

+0

如果Chrome請求來自httpClient請求,Chrome將如何看到請求?使用提琴手查看請求。 –

+0

提琴手請求標頭只有:四個接受參數和一個用戶代理? – Ray

0

我以前按照下面的方法設置請求頭。如果適合你,請嘗試。

[腳本]

$("#Grid1").ajaxSuccess(function (evt, request, settings) { 
    $('.Status').html(request.getResponseHeader("Status")); 
    }); 

[查看]

<h2>Status:</h2><h2 class="Status" style="color:Red;"> 

[控制器]

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Save(Order orders) 
    { 
     string status = string.Empty; 

     if (orders != null) 
     { 
      OrderRepository.Update(orders); 
      status = "Updated"; 
     } 

     Response.AddHeader("Status", status);    
     return data.GridActions<EditableOrder>(); 
    } 

Response header

+0

對不起,我想設置請求頭,而不是響應,併爲webapi,我需要使用HttpClient和HttpRequestMessage發送請求,我只是不知道如何正確設置對象的屬性,順便說一句,你是哪個工具用於獲取標題?瀏覽器? – Ray

+0

它是Firefox瀏覽器中的'firebug'開發人員插件。 – RGR

+0

@Ray您不需要使用HttpClient調用Web API,您可以使用任何可以發出http請求的軟件。 –