WebAPI通过HttpClient访问时如何指定返回格式

娃都会打酱油了 2014-11-25 10:20:48
WebAPI相关资料好难找。。。。。找资料找了半天都没找到具体的,按照经验去尝试也没尝试出结果来
求哪位大神给个结果,最好能给个实际的响应过程说明

var httpClient = new HttpClient();
string url="http://demo.com/api/demo";
var dic = new Dictionary<string, string>();
//填充Dictionary
HttpContent httpContent = new FormUrlEncodedContent(dic);
//FormUrlEncodedContent默认ContentType 为application/x-www-form-urlencoded
//httpContent 是请求的Content信息,不对应Response信息,修改不正确会导致服务端获取不到Form数据
var taskP = httpClient.PostAsync(url, httpContent );//POST
var taskG = httpClient.GetAsync(url);//GET
//问题在这里,什么时候设定响应的ContentType
HttpResponseMessage rmP=taskP.Result;
HttpResponseMessage rmG=taskG.Result;
//HttpResponseMessage 有个Header参数,但貌似不是设定响应类型的
//没搞懂Response响应步骤是如何的,是获取到HttpResponseMessage已经代表整个完整的响应了
//还是通过Content进行读取时才从服务端获取实际的响应数据
//但根据下面的测试设定无效,似乎可以推断在获取HttpResponseMessage时服务器已经给出响应结果了
var responseContent = rmP.Content;
responseContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/xml");//这步再设定ContentType 已经不起效果
responseContent.ReadAsStringAsync().Result;//这边永远返回的是json格式字符串


...全文
1975 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-11-26
  • 打赏
  • 举报
回复
很难找么 google webapi return xml 第一条 http://stackoverflow.com/questions/11662028/webapi-to-return-xml 第二个答案 Accept: application/xml 当然,如果你非要坚持用百度,当我没说。
宝_爸 2014-11-26
  • 打赏
  • 举报
回复
可以使用RestSharp来帮助调用web api http://restsharp.org/ 下面是sample code. header中加入accept application/xml应该就可以了。 request.AddHeader("Accept", "application/xml") var client = new RestClient("http://example.com"); // client.Authenticator = new HttpBasicAuthenticator(username, password); var request = new RestRequest("resource/{id}", Method.POST); request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method request.AddUrlSegment("id", "123"); // replaces matching token in request.Resource // easily add HTTP Headers request.AddHeader("header", "value"); // add files to upload (works with compatible verbs) request.AddFile(path); // execute the request RestResponse response = client.Execute(request); var content = response.Content; // raw content as string // or automatically deserialize result // return content type is sniffed but can be explicitly set via RestClient.AddHandler(); RestResponse<Person> response2 = client.Execute<Person>(request); var name = response2.Data.Name; // easy async support client.ExecuteAsync(request, response => { Console.WriteLine(response.Content); }); // async with deserialization var asyncHandle = client.ExecuteAsync<Person>(request, response => { Console.WriteLine(response.Data.Name); }); // abort the request on demand asyncHandle.Abort();
  • 打赏
  • 举报
回复
尼玛一下午都没找到答案,发完帖子就找到答案了。。。这让我情何以堪。。。。。。。。。
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml“);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/json“);

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧