2012-07-29 133 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

相关问题