Запрос относительно локального относительного URL "Невозможно назначить запрошенный адрес" - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть проект основного веб-приложения asp.net для Visual Studio 2017 [/ 2019] с поддержкой докеров с использованием изображений FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base и FROM microsoft/dotnet:2.1-sdk AS build.

Когда мой экземпляр отладки f5 запускается на http://localhost:44301/ Я пытаюсь сделать запрос HttpClient.SendAsync () для относительного URL /data/some.json для извлечения данных, чтобы отладка localhost могла эмулировать только состояние безопасностив опубликованном случае приложения.

Когда я отлаживаю f5 с помощью цели проекта IISExpress, все это прекрасно работает.Когда я отлаживаю f5 от цели Docker, вызов HttpClient.SendAsync () против относительного URL-адреса localhost или полностью определенных путей https://localhost:44301/data/some.json и http://localhost:8081/data/some.json генерирует исключение с сообщением Cannot assign requested address.Если я изменяю код для загрузки some.json из удаленного URL-адреса, например, пути к общедоступному блобу учетной записи хранения, цель Docker отладки f5 не завершается с ошибкой при этом вызове.

Можно воспроизвести проблему, используя предоставленную https://github.com/myusrn/adncauthexploration.git AzWebApp1 проект, для которого также требуется https://github.com/myusrn/KK.AspNetCore.EasyAuthAuthentication.git, доступ к которому осуществляется с помощью ссылки на проект, чтобы включить отладку содержимого этого пакета nuget.При использовании localhost f5 iisexpress target проблема не воспроизводится.Переключение на докер localhost f5 предназначается для репозиториев при попадании отладочной URL-адреса KK.AspNetCore.EasyAuthAuthentication\Services\EasyAuthWithAuthMeService.cs |line 109 var response = await client.SendAsync(httpRequest);.

Мне интересно, есть ли какой-нибудь параметр Dockerfile, который мне нужно сделать, чтобы включить этот отладочный запрос относительного URL-адреса localhost f5 с помощью кода запуска основного веб-приложения asp.net.

1 Ответ

0 голосов
/ 31 декабря 2018

Для доступа к ресурсам из IIS Express, SelfHost и Docker, вы можете настроить HttpClient.BaseAddress с Http-запросом, как показано ниже:

public class HomeController : Controller
{
    private readonly HttpClient httpClient;
    public HomeController(
        , IHttpClientFactory httpClientFactory)
    {
        this.httpClient = httpClientFactory.CreateClient();
    }
    public async Task<IActionResult> Index()
    {
        this.httpClient.BaseAddress = new Uri($"{this.Request.Scheme}://{this.Request.Host}");
        var response = await httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get,
            "data/some.json"));
        var result = await response.Content.ReadAsStringAsync();

        return View();
    }
}
...