2012-07-29 75 views
0

對於POST請求,我回到text/html的格式和響應體包含以下信息的響應:text/html的VS應用程序/ x-WWW窗體-urlencoded和FormUrlEncodedMediaTypeFormatter

組oauth_token = XXXXXXXXXXXXXXXXXXXXXXXXX & oauth_token_secret = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX & oauth_callback_confirmed =真

我通過System.Net.Http.HttpClient了此請求和我throught我可以讀取響應機智h FormUrlEncodedMediaTypeFormatter as FormDataCollection但事實證明FormUrlEncodedMediaTypeFormatter默認只支持application/x-www-form-urlencoded格式。所以,我工作圍繞這個用下面的代碼:

using (OAuthHttpClient client = new OAuthHttpClient(creds)) { 

    var response = await client.PostAsync(requestUri, new EmptyContent()); 
    var formatter = new FormUrlEncodedMediaTypeFormatter(); 
    formatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
    var result = await response.Content.ReadAsAsync<FormDataCollection>(new List<MediaTypeFormatter>() { formatter }); 

} 

這裏的問題是:

是響應供應商(在這種情況下,Twitter等)發送該響應,文本做錯了/ html或應FormUrlEncodedMediaTypeFormatter支持text/html默認類型?

+1

什麼是您在POST中的Accept Header? – 2012-07-29 13:51:55

+0

@AlexanderZeitler這是一個非常明智的評論。沒有,我沒有發送任何迴應。我會盡量明確,看看這次給了我什麼。 – tugberk 2012-07-29 13:53:45

+0

順便說一下,你不會迴應'application/x-www-form-urlencoded',因爲FormUrlEncodedMediaTypeFormatter不能寫任何東西。它是隻讀的,你可以看看[CanWriteType方法](https://aspnetwebstack.codeplex.com/SourceControl/changeset/view/012d90328619#src%2fSystem.Net.Http.Formatting%2fFormatting%2fFormUrlEncodedMediaTypeFormatter。cs) – 2012-07-29 13:56:16

回答

3

你的問題是缺少一些關鍵信息,即什麼是requestUri應該默認返回,它是一個Web API服務或外部等等。它似乎不是Web API,因爲它有點奇怪,它返回「文本/ HTML」。

但是,FormUrlEncodedMediaTypeFormatter不支持從text/html格式化的事實絕對沒問題。因爲它爲什麼會呢? 「application/x-www-form-urlencoded」實際上是一個鍵值字典,text/html是一個富媒體類型。

在網頁API,同程內容協商的工作,它着眼於

  1. 介質類型映射(我假設不到位你的情況)
  2. 接受頭 - 看着你的要求,你不設置這些
  3. 請求的內容類型 - 再次,看着你的要求,你不設置它,所以它是空
  4. 可以格式化序列化給定類型

因此,如果您向任何Web API操作顯示請求,則會返回text/xml(如果您沒有手動調整連接)。

+0

問題是關於'FormUrlEncodedMediaTypeFormatter'而不是關於conneg。響應從Twitter OAuth服務器返回。 – tugberk 2012-07-29 14:18:35

+0

所以我包含了答案 - 但是FormUrlEncodedMediaTypeFormatter不支持從text/html格式化的事實絕對沒問題。因爲它爲什麼會呢? 「application/x-www-form-urlencoded」實際上是一個鍵值字典,text/html是一個富媒體類型。我提到conneg,因爲我不確定響應是來自Web API還是外部服務 – 2012-07-29 14:20:29

+0

我以爲是一樣的。我認爲響應提供商(Twitter)將此響應作爲** text/html **發送出去是錯誤的。 – tugberk 2012-07-29 14:22:14

3

我同意菲利普這是一個很好的解決不正確的內容類型標題。

Henrik

相關問題