问题标签 [dotnet-httpclient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# Sending an object through HttpClient to a Web API
I have a WindowsForm application and i want to send an List<> to the Web API
here is my code in the windows form app:
What should i put in the controller-method to get the List?
mocking - 使用模拟 HttpMessageHandler 时如何使用 HttpClient 管理 cookie
HttpRequestMessage
我有一个单元测试,它通过传入实例并接收实例来调用类库HttpResponseMessages
。在这方面,它与测试 WebApi 非常相似ApiController
。
我正在测试的代码将 cookie 添加到HttpResponseMessage
,并希望在随后的传入HttpRequestMessage
调用中看到这些 cookie,这就是浏览器(或HttpWebRequest
)的行为方式。
我没有使用HttpClientHandler
,因为请求实际上并没有在网络上进行,而是使用HttpMessageHandler
我初始化的模型传递给产品HttpClient
。因此,我无法访问其中的 cookie 处理HttpClientHandler
。似乎要获得我需要的 cookie 行为,我将不得不手动解析 cookie 中的 cookie,HttpResponseMessage
然后手动将它们序列化为HttpRequestMessage
. 这也完全忽略了 CookieContainer 将 cookie 正确应用于正确请求的逻辑。
有没有更简单的方法?
c# - 如何使用 .Net 4.0 中包含的 HttpClient 类将文件上传到在 IIS Express 中运行的 Asp.Net MVC 4.0 操作
我有一个 C/S 应用程序。我用 Asp.Net MVC 4.0 实现了服务器,客户端在 .Net 4.5 上运行。
我在服务器端有一个控制器动作,如下所示:
我创建了一个测试 html 页面来在浏览器中对其进行测试。它按预期工作。
在客户端,我使用HttpClient类,它在不涉及文件上传的情况下工作得很好。然而,经过几天的研究,我仍然没有运气在运行 IIS Express 的调试机器中解决这个问题。我发现所有的线索都通向MultipartFormDataContent
,但仍然无法让它工作,即使我复制了那些示例代码,服务器端仍然无法获取任何东西,所有 args 都是空的,并且Request.Files
. 我曾经有自己的基于HttpWebRequest的 http 助手类,它适用于文件上传,但我更喜欢在这个新项目中使用 HttpClient。
那么,如何使用 HttpClient 将文件上传到服务器?
c# - HttpClient 和 HttpClientHandler 是否必须在请求之间进行处理?
.NET Framework 4.5 中的System.Net.Http.HttpClient和System.Net.Http.HttpClientHandler实现 IDisposable(通过System.Net.Http.HttpMessageInvoker)。
using
声明文件说:
通常,当您使用 IDisposable 对象时,您应该在 using 语句中声明和实例化它。
这个答案使用这种模式:
但是微软最明显的例子并没有Dispose()
显式或隐式调用。例如:
在公告的评论中,有人问微软员工:
检查您的示例后,我发现您没有对 HttpClient 实例执行 dispose 操作。我已经在我的应用程序上使用了带有 using 语句的 HttpClient 的所有实例,并且我认为这是正确的方法,因为 HttpClient 实现了 IDisposable 接口。我在正确的道路上吗?
他的回答是:
通常这是正确的,尽管您必须小心“使用”和异步,因为它们不会真正混合在 .Net 4 中,在 .Net 4.5 中,您可以在“使用”语句中使用“等待”。
顺便说一句,您可以根据自己的喜好多次重复使用相同的 HttpClient,因此通常您不会一直创建/处置它们。
第二段对于这个问题是多余的,它不是关心你可以使用多少次 HttpClient 实例,而是关心在你不再需要它之后是否有必要将其丢弃。
(更新:事实上,第二段是答案的关键,@DPeden 在下面提供。)
所以我的问题是:
考虑到当前的实现(.NET Framework 4.5),是否有必要在 HttpClient 和 HttpClientHandler 实例上调用 Dispose() ?澄清:“必要”是指不处置是否有任何负面后果,例如资源泄漏或数据损坏风险。
如果没有必要,这是否是一个“好习惯”,因为他们实现了 IDisposable?
如果有必要(或推荐),上面提到的这段代码是否安全地实现它(对于 .NET Framework 4.5)?
如果这些类不需要调用 Dispose(),为什么它们被实现为 IDisposable?
如果他们需要,或者如果这是推荐的做法,Microsoft 示例是否具有误导性或不安全?
c# - 铸造简单的通用对象
我有一个我创建的用于简化使用 HttpClient 调用的方法。它使用 HttpReponse.Content.ReadAsAsync().Result 方法从 API 获取响应。
这一切都很好。我的方法看起来像这样:
我的问题是,如果查询失败,它需要返回一个空类型的 T。如果它是我编写的自定义类,这很好,但它不适用于字符串或字符串 [] 等对象。有任何想法吗?
干杯
NCBL
iis-7.5 - 接受编码:gzip:内容被 gzip 压缩两次
我正在使用 IIS 来提供静态文件。我已经配置 IIS(使用 GUI)来启用静态和动态压缩。
我是HttpClient
用来下载的,如下:
我正在使用 Fiddler 检查流量,我可以看到前一个或两个响应没有被压缩。我假设 IIS 正在后台压缩文件并将其缓存在某处。写入磁盘的文件约为 14MB(预期)。
稍后的请求被压缩。我可以Content-Encoding: gzip
在响应中看到一个标头,下载的文件大约为 360KB。它是一个gzip
文件,由 Cygwin 的file
命令标识。
但是,当我使用gzip -d
它解压缩时,我最终得到了一个 660KB 的文件,它本身就是一个 gzip 压缩文件,也由file
.
如果我解压缩该文件,我会得到我期望的 14MB 文件。
那么:为什么我的文件被压缩了两次?
asp.net-mvc-4 - 从 Mvc 控制器使用 WebApi - HttpClient 或参考 API 程序集?
我有一个带有 MVC 应用程序和 Web API 的解决方案。它们位于不同的项目和域中(使用 CORS)。我将其构建为 Web API,以便灵活地添加消费者,但目前我的 MVC 应用程序是唯一的消费者。因此,我正在争论是在我的 MVC 控制器中使用 HttpClient 还是直接实例化 ApiController。
在任何一种情况下,我都在使用依赖注入(Autofac),所以我也想知道如何配置它,因为 HttpClient 或 ApiController 都没有任何类型的接口,我可以像通常那样通过构造函数参数注入,所以我是不知道如何处理。
注入实例的生命周期范围应该是什么?HttpClient 可能应该是 Singleton,因为不鼓励在每次请求后处理它。
注意通过调用 API 返回用于填充图表的大型数据集,这就是为什么我稍微远离 HttpClient,因为我觉得使用 Http 会产生额外的开销。直接实例化 ApiController 是反模式吗?
谢谢
c# - 在尝试 HttpClient 连接之前测试开放端口
HttpClient类的各种方法(GetAsync 等)采用 Uri 对象或字符串并尝试打开到指定位置的连接。但是,在我的情况下,远程主机很可能没有在监听(端口已关闭并将被主动拒绝;它在我们的 LAN 内)。
我宁愿不依靠捕获异常来处理这种情况,特别是因为这些方法会引发AggregateException,然后我必须对其进行筛选。
有没有更好的方法来检测这种情况,同时仍然获得 HttpClient 类的好处(远程主机是 WebApi 服务)?我是否应该使用 TcpClient 之类的东西预先检查端口是否正在侦听?当然,这涉及调用之间的竞争条件。我希望采用 HttpMessageHandler 的构造函数重载会有所帮助,但WebRequestHandler中的任何内容都不会跳出我...
c#-4.0 - 如何使用 HttpClient 从 Web Api 调用 PUT 方法?
我想调用 Api 函数 (1st) 。从使用HttpClient的第二个 Api 函数。但我总是收到404错误。
第一个 API 函数(端点: http://本地主机:xxxxx /api/Test/)
第二个API函数
所以我的问题是。我可以像以前一样从 HttpClient 将方法参数作为对象数组发布吗?我不想将模型作为方法参数传递。
我的代码有什么问题?
将代码更改为后无法得到任何响应
或者
c#-4.0 - 如何从任务返回结果,利用 Async HttpClient 调用的好处?
我可以像下面这样写代码(第一个)吗
我可以像下面这样写代码(第二个)吗
我想使用 Httpclient.PutAsJsonAsync()
. 在.Net 4.0 中?
或者有什么更好的方法来做到这一点?所以我可以利用异步调用的好处吗?