【发布时间】:2012-07-29 13:43:40
【问题描述】:
对于 POST 请求,我收到了 text/html 格式的响应,响应正文包含以下信息:
oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXX&oauth_token_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&oauth_callback_confirmed=true
我通过System.Net.Http.HttpClient 提出了这个请求,我可以通过FormUrlEncodedMediaTypeFormatter 将响应读取为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)是否以 text/html 形式发送此响应做错了,还是应该 FormUrlEncodedMediaTypeFormatter 支持 text/html 类型默认?
【问题讨论】:
-
POST 中的 Accept Header 是什么?
-
@AlexanderZeitler 这是一个非常明智的评论。没有,我没有发送任何内容并收到此回复。我会尽量明确一点,看看这次它给了我什么。
-
顺便说一句,你不会回来
application/x-www-form-urlencoded,因为FormUrlEncodedMediaTypeFormatter不能写任何东西。它是只读的,您可以查看CanWriteType method -
@AlexanderZeitler 我将其设置为
application/json以查看它的行为,我得到了相同的响应。 -
@AlexanderZeitler 我不想让
FormUrlEncodedMediaTypeFormatter写任何东西。
标签: http rest oauth asp.net-web-api dotnet-httpclient