【发布时间】:2020-09-12 18:03:49
【问题描述】:
我有一个模型。它有一个名为country 的属性。我需要通过 3rd 方服务验证此属性,即国家/地区是否有效
我可以这么想:
- 我应该在模型构造函数中注入 HttpClient 并在模型本身中调用 3rd 方服务吗?
- 我是否应该创建另一个服务来调用第 3 方服务并将另一个服务注入我的模型中?
- 有没有更好的方法来做到这一点?
【问题讨论】:
-
将外部服务 URL 存储在配置中,并使用 DI 将 IConfiguration 传递给模型类。然后使用 HttpClient 与服务交互并执行验证。由于外部服务提供的数据属于查找类,所以我使用 IMemCache 来缓存数据,这样可以避免对外部服务的多次调用。更好的解决方案是将这种外部服务交互移动到代理类并将代理类注入模型,从而保持逻辑分离和可重用。
-
您确定要对模型进行自我验证吗?我建议使用像
FluentValidation这样的库来执行验证,然后有单独的验证类。至于HttpClient:使用HttpClientFactory,将IHttpMessageHandlerFactory注入你的验证器并从中构造Httpclient。 -
验证是为了确认哪些国家目前可以与第三方 API 一起使用,还是只是为了检查国家代码是否有效?对于后者,我使用从 JSON 配置加载的国家代码数组。
-
有点,虽然我建议使用HttpClientFactory,因为它旨在缓解因每次需要创建新客户端而导致的套接字耗尽,并且还可以缓解因使用单个 HttpClient。
-
这解决了我的问题。请添加为答案
标签: c# .net validation asp.net-core .net-core