我已经在多个地方(例如here,here或here)阅读了在请求后直接处理HttpClient的不良做法。在完成所有请求后,最好将其处理掉,以允许重用连接。
为了尝试这一点,我创建了一个HttpClient实例并以这种方式添加到我班级的静态字段中:
var result = await HttpClient.PostAsJsonAsync(completeUri, request);
然后我使用我的实例通过此命令调用Web服务:
WebRequestHandler
我第一次运行代码时,一切正常,我得到了正确的响应,但是,接下来的一段时间我从服务器上获得了未经授权的声明,告诉我我没有使用客户证书。
如果对于以下来电,{{1}}没有考虑到。
答案 0 :(得分:1)
您的修复应如下所示:
handler.PreAuthenticate = true;
建立与服务的连接后,您可以重新使用它与使用具有不同身份验证信息的不同客户端进行通信。这意味着,服务需要知道哪个客户端每次都发送请求,否则可能是安全漏洞 - 例如在最后连接的客户端下执行请求。这取决于您的身份验证机制,但基本上WebRequestHandler
在第一次请求后设置标志IsAuthenticated
,并停止在下一次请求时发送身份验证信息。 PreAuthenticate
选项强制在每个请求上发送身份验证信息。