【发布时间】:2020-02-21 07:52:29
【问题描述】:
我的 REST API 中有一个控制器,我在其中执行 HttpRequestMessage。我现在这样做的方式是使用 IConfiguration 接口将端点作为变量获取:
public class MyController : Controller
{
private readonly IConfiguration _configuration;
private readonly HttpClient _httpClient;
public MyController(IConfiguration configuration, HttpClient httpClient){
_configuration = configuration;
_httpClient = httpClient;
}
...
...
[HttpGet]
public async Task<IActionResult> Get(){
...
...
var httpRequest = new HttpRequestMessage(HttpMethod.Get, _configuration["MY_ENDPOINT"]);
await _httpClient.SendAsync(httpRequest);
...
...
return Ok();
}
问题是,通过接口注入 api 端点显然更好,老实说,我不知道这是什么或如何完成的。
我确实注入了 HttpClient 和 IConfiguration,但这是我已经做过几次并且看到其他人这样做的事情。但是仅仅注入一个端点(没有 IConfiguration),对我来说似乎并不熟悉。 ... 只是因为我取出了对问题没有影响的代码。
是否有任何简单的方法来注入端点 - 只有我不明白它的原因?
我想我必须创建一个接口并在其中创建一些只返回端点的逻辑?但这不就是双重工作吗?
我的解决方案:
目前我能想到的唯一解决方法就是注入一个字符串:
private readonly string _myEndpoint;
然后注入它:
_myEndpoint = Environment.GetEnvironmentVariable("MY_ENDPOINT");
最后在我的 httpRequestMessage 中使用它:
var httpRequest = new HttpRequestMessage(HttpMethod.Get, _myEndpoint);
这不是一个接口,但我也不使用 IConfiguration 接口,也不会编写很多不需要的代码。
如果有更好/更聪明的建议,请大声说出来。
【问题讨论】:
标签: c# api dependency-injection controller httprequest