如何重复使用每个请求具有不同凭据的HttpClient实例

时间:2016-10-27 20:24:48

标签: c# .net asp.net-mvc

我有一个MVC 5应用程序,其中包含一个发出HTTP请求的控制器操作。 为此,我使用的是HttpClient。

我从其他人(例如此博客post)和我自己的经历中学到了什么 同时即时通知大量HttpClient会对应用程序的性能产生负面影响,而不仅仅是整个服务器的性能。

到目前为止,我重用HttpClient实例的要求可以通过像这样的代码来解决

$.post(
   daten.ajaxurl,
   {
      "action": "createuser",
   }, 
   function(data){
       alert(data)
   }
)

在控制器动作中需要类似的重复使用,我选择使用 控制器类中的HttpClient的静态实例。问题是 传递给HttpClientHandler的凭据随着每个请求而改变 它们部分依赖于时间戳值(using (var handler = new HttpClientHandler() { Credentials = new NetworkCredential(getUsername(), getHashedPassword())}) using (var client = new HttpClient(handler)) { // Long running loop that makes a different HTTP request // on each iteration but using the same HttpClient instance } 方法每次调用时都会产生不同的密码。)

由于在远程服务器上执行身份验证的方式,我必须在构成请求正文的XML内容中包含密码。

这就是我遇到问题的地方:

如何在对控制器操作的不同调用中重用相同的HttpClient实例,同时确保它是 使用具有最新凭据的处理程序?

甚至可以这样做吗?

是否可以在将处理程序传递给HttpInstance后更新处理程序?

或者我是否需要修改客户端对象的DefaultRequestHeaders,如果对象被不同的线程同时使用,根据某些来源可能会引入细微的错误?

0 个答案:

没有答案