5

我正在開發C#\ XAML metro-ui應用程序。我想打電話給一些服務,併爲此使用HttpWebRequest。以前實現的HttpWebRequest包含ContentLengthUserAgent屬性。但是WinRT的實現沒有它。我試圖使用這個post中描述的方法。它適用於UserAgent,但不適用於ContentLength。 我試圖設置Headers如何在Windows8應用程序中向HttpWebRequest添加標題?

request.Headers["Content-length"] = Length; 
request.Headers["User-agent"] = UserAgent; 

但接收到異常「的‘內容長度’標頭必須使用合適的屬性或方法進行修改。」

熱是否可以設置HeadersHttpWebRequest在WinRT中實現?

+0

如果刪除設置內容長度,它是否工作? HttpWepRequest可能不允許您設置內容長度,因爲它會根據您發送的內容計算它。 –

+0

@LarryOsterman沒有。此外,我需要設置「內容類型」屬性。所以我也應該評論它。對於通過鏈接描述的方法:當我評論這些屬性時,會得到'400 Bad Request'。當我爲'HttpWebRequest'評論這些時,我得到了webexception'底層連接已關閉:連接意外關閉。「#: – RredCat

+0

嗯。我可以看到HttpWebRequest阻止設置內容長度(因爲它可以計算內容長度)。不好的請求意味着發送的消息有問題,小提琴手顯示你發送了什麼? –

回答

12

HttpWebRequest在WinRT下有半棄用狀態。之前在以前的.NET平臺上可以修改的某些標頭值不能再使用它進行修改。

看來,HttpClient是一個新的和改進的替代HttpWebRequest與一個簡單的API和完整的異步支持。

既然你想指定內容長度,我假設你正在嘗試POST或將某些東西給服務器。在這種情況下,您需要根據需要使用PostAsync()或PutAsync()。

var req = new HttpClient(); 
    req.DefaultRequestHeaders.Add("User-agent", UserAgent); 
    req.DefaultRequestHeaders.Add("Content-length", Length); 
    return await req.PostAsync(RequestURL, Body); 

你可能並不真的需要指定的Content-Length頭,因爲它會根據身體的實際長度的方法來自動包括在內,但你可以嘗試兩種方式。

+0

是的..你是對的..謝謝你的回答。我正在玩類似的東西..但正如我所看到的'體'是'HttpContent'類型,對吧?你把那裏的參數放在那裏,不是嗎?你能否解釋一下你是如何在「HttpContent」實例中添加params的? – RredCat

+0

我找到了。我剛剛將參數字符串編碼爲'ASCII'。但它不是完整的解決方案。我在@Larry Osterman的評論中提到我在設置ContentType時遇到了問題。我找到了方法 - 'content.Headers.ContentType = new MediaTypeHeaderValue(「application/x-www-form-urlencoded」);'無論如何,我標記你作爲答案,因爲你很接近答案) – RredCat

相關問題