как ввести httprequestmessage / конечную точку - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть контроллер в моем 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) кажется мне незнакомым. ... только потому, что я удалил код, который не влияет на вопрос.

Есть ли какой-нибудь простой способ просто внедрить конечную точку - и только я не понимаю причина этого?

Я полагаю, мне нужно создать интерфейс и в этом логе c, который просто возвращает конечную точку? Но разве это не просто двойная работа?

МОЕ РЕШЕНИЕ:

Единственный обходной путь, о котором я могу думать в данный момент, - это просто ввести строку:

private readonly string _myEndpoint;

и затем введите его:

_myEndpoint = Environment.GetEnvironmentVariable("MY_ENDPOINT");

и, наконец, используйте это в моем httpRequestMessage:

var httpRequest = new HttpRequestMessage(HttpMethod.Get, _myEndpoint);

Это не интерфейс, но опять же я не использую IConfiguration-интерфейс и не пишите много ненужного кода.

Если есть какое-нибудь лучшее / более умное предложение, пожалуйста, кричите.

1 Ответ

0 голосов
/ 21 февраля 2020

Есть способ, которым вы можете загрузить "опции" в коллекцию сервисов с помощью:

services.Configure<EndpointConfig>(Configuration.GetSection("EndPointConfig"));

EndpointConfig Вот класс, который вы должны определить:

public class EndpointConfig 
{
    public string EndpointUrl {get;set;}
}

В этом конкретном примере для appsettings.json "EndPointConfig" потребуется EndpointUrl, вот грубый пример:

{
    "EndPointConfig" : {
        "EndpointUrl" : "https://localhost"
    }

}

затем, когда вы попадаете на свой контроллер, вы передаете в конфигурации примерно так:

private readonly EndpointConfig _configuration;
private readonly HttpClient _httpClient;

public MyController(IOptions<EndpointConfig> configuration, HttpClient httpClient){
    _configuration = configuration.Value;
    _httpClient = httpClient;
}

Есть несколько хороших документов по этому поводу, если вы хотите попробовать это: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-3.1


Если вы не хотите определять EndpointConfig раздел в ваших appsettings. json как ваше описание в комментариях, тогда вы просто настроите i с помощью объекта конфигурации:

services.Configure<EndpointConfig>(Configuration);

Теперь он будет искать имя свойства (в данном случае * 1025) *) в базовом объекте ваших настроек приложения json:

{
   "EndpointUrl" : "https://localhost"
}

Если вы хотите искать другое имя, например My_Endpoint, вам просто нужно переименовать вашу собственность:

public class EndpointConfig 
{
    public string My_Endpoint {get; set;}
}
...