我System.Net.Http.HttpClient
用来与后端 MVC4 应用程序中的 RESTful 服务通信。根据发出请求的用户,与 RESTful 服务通信的身份验证标头会有所不同,因此应为每个用户缓存标头中设置的值。这些值可能会在会话的生命周期内发生变化。
我正在为 DI 使用 StructureMap。一些问题:
- 据此,听起来所有请求都应该有一个 HttpClient 实例。尽管有人说直接注入 HttpClient 可能是个坏主意,因为它是 IDisposabe,但其他人说没有必要处置它。那么,注入 HttpClient 的最佳方法是什么?
- HttpClient 的单个实例是否有可能在运行时被丢弃或失效(可能是 REST 服务器重新启动)?如果是这样,那么我认为直接注入 HttpClient 没有选择,它必须包装在一个管理器类中,该类将检查 HttClient 实例是否有效并在出现问题时实例化一个新客户端。问题是我看不到进行该测试的方法。
- 缓存用户特定身份验证标头信息的最佳位置在哪里?我不认为将信息从控制器传递到服务层是干净的,正如这里似乎建议的那样,所以我认为数据层中的 HttpSession 范围内的注入对象是这里的方法,但会喜欢听到其他想法。