.Net HttpClient Headers.Add("Content-Type", "application/json") 异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net HttpClient Headers.Add("Content-Type", "application/json") 异常相关的知识,希望对你有一定的参考价值。
现有一个 HttpClientHandler 扩展类
public class JsonHttpClientHandler : HttpClientHandler
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
request.Headers.Add("Content-Type", "application/json");
return base.SendAsync(request, cancellationToken);
抛异常:Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.
难道不能这么写吗,那应该怎么写?求大神指教!!!!
如果不这么写,默认也是返回的json格式,但是如果我想返回xml格式就没办法设置了
request.Headers.Add("Content-Type", "application/xml");
这样写错误依旧。
POST方式
HttpContent httpContent = new StringContent(requestJson);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
//httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var httpClient = new HttpClient();
var responseJson = httpClient.PostAsync("***", httpContent).Result.Content.ReadAsStringAsync().Result;
是可以的 因为
public Task<HttpResponseMessage> PostAsync(string requestUri, HttpContent content);
POST方法是可以接收HttpContent参数的,Get没有这个参数 只能扩展写,但是扩展写了就抛异常
调用也确实返回了xml或者json,Get默认是json格式,我现在想Get也可以返回xml格式。求大神指教!!!!
Get使用方式
var aclient = new HttpClient(new JsonHttpClientHandler());
var aa = aclient.GetAsync("***").Result.Content.ReadAsStringAsync().Result;
request.Content.Headers.ContentType 有这个
但是 request.Content 是 null 所以 也就没用了
已解决:
client.DefaultRequestHeaders.Add("Accept", "application/xml");
var httpContent = new StringContent(data, Encoding.UTF8);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
httpRequest.Content = httpContent;
//虽然问题过去很久,但是还是想给以后遇到同样问题的朋友的参考参考 参考技术A request没有ContentType这个属性吗?有的话直接赋值呗。追问
request.Content.Headers.ContentType 有这个
但是 request.Content 是 null 所以 也就没用了
额~
懂的不多,帮不到你了。
在 .NET 4.5 中找不到 HttpClient
【中文标题】在 .NET 4.5 中找不到 HttpClient【英文标题】:HttpClient is not found in .NET 4.5 【发布时间】:2013-05-01 21:06:01 【问题描述】:我正在尝试在 .NET 4.5 中使用新的 HttpClient
,但 Visual Studio 抱怨它不存在。我有System.Net
,但是当我输入System.Net.Http
时,它也会抱怨。
我应该为这个课程下载一个新的分发包吗?
【问题讨论】:
您需要引用System.Net.Http
程序集。此外,PCL 不支持使用该类,因此如果您正在尝试这样做,那么您就不走运了。
谢谢,但我没有在“添加程序集”对话框中列出它。
你在开发什么类型的项目?
PCL?这是一个 Windows 窗体应用程序。
不确定会发生什么,除了确保参考管理器窗口中的“定位”选项设置为 4.5 框架。
【参考方案1】:
添加对System.Net.Http
的引用:
【讨论】:
谢谢,但我没有在“添加程序集”对话框中列出它。 CS项目.NET目标版本? 谢谢,出了点问题。我现在试了一下,它出现了,但是当我尝试添加时,它的程序集没有被添加。无论如何,我认为这是一个与 VS 相关的问题。 这对我来说还不够,您还需要添加对 System.Net.Http.WebRequest 的引用【参考方案2】:我遇到了同样的问题。经过一番挖掘,我发现您必须安装this package,然后添加对System.Net.Http
的引用才能让它不抱怨!
【讨论】:
这为我解决了。我有一个 xamarin 解决方案,它有一个 PCL、一个 WindowsPhone 应用程序、一个 Android 和一个 iPhone 应用程序。我想在 PCL 中使用 HttpClient,但如果我只是添加对 System.Net.Http 的引用,我的项目将被重新定位并变得与我的 windows phone 应用程序不兼容。安装这个包可以防止我的 PCL 被重新定位,现在一切都编译得很好:) 这对我来说还不够,我还必须添加 System.Net.Http.WebRequest 这对我来说适用于 ASP.NET 4.5.1 项目。谢谢!【参考方案3】:开始使用vs2017,遇到同样的问题,在创建Native + PCL时,找不到HttpClient,去Nuget获取Microsoft.Net.Http解决了我的问题。
【讨论】:
【参考方案4】:当我在 App_Code
文件夹中添加一个类时,我遇到了这个问题,该类在我的一个函数中调用了这个 HttpClient
。在花费了无数小时后,我发现我班级的Properties
下的Build Action
设置为Content
。
将此 Build Action
更改为 Compile
解决了该问题。
【讨论】:
【参考方案5】:我只是:
-
关闭 Visual Studio
重新打开
轰隆隆。它找到了HttpClient。
【讨论】:
以上是关于.Net HttpClient Headers.Add("Content-Type", "application/json") 异常的主要内容,如果未能解决你的问题,请参考以下文章
.net 4.0 和 .net 4.5 中的 HttpClient 有啥区别