0

System.Net.Http.HttpClient用来与后端 MVC4 应用程序中的 RESTful 服务通信。根据发出请求的用户,与 RESTful 服务通信的身份验证标头会有所不同,因此应为每个用户缓存标头中设置的值。这些值可能会在会话的生命周期内发生变化。

我正在为 DI 使用 StructureMap。一些问题:

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

1 回答 1

0

在 MVC4 应用程序启动时创建 HttpClient 并在它关闭时将其释放。如果您使用 HttpClient 调用的服务器重新启动,则不需要您创建新的 HttpClient 实例。TCP 连接由 ServicePointManager 独立管理。

我不明白您关于用户特定身份验证信息的问题。当您调用 RESTful 服务时,您是否试图让您的 MVC 站点模拟用户?如果是这样,那么只需在每个请求上设置 Auth 标头。

于 2013-10-22T14:38:41.880 回答