docker 针对localhost相对url的请求“无法分配请求的地址”

hi3rlvi2  于 2022-11-22  发布在  Docker
关注(0)|答案(2)|浏览(389)

我有一个Visual Studio 2017 [ / 2019 ] asp.net核心Web应用项目,使用FROM microsoft/dotnet:2.1-aspnetcore-runtime AS baseFROM microsoft/dotnet:2.1-sdk AS build图像启用了Docker支持。
当我的f5调试示例在http://localhost:44301/上启动时,我尝试对相对url /data/some.json发出HttpClient.SendAsync()请求,以拉入数据,使localhost调试能够模拟仅在已发布应用案例中存在的安全状态。
当我使用项目的IISExpress目标进行调试时,一切正常。当我针对Docker目标HttpClient进行调试时。SendAsync如果我更改代码以从远程url加载some.json(例如存储帐户公共blob路径),则会生成异常,并显示消息Cannot assign requested address。f5调试Docker目标不会在此调用中失败。
可以使用https://github.com/myusrn/adncauthexploration.git提供的AzWebApp1项目重现问题,该项目还需要使用项目引用访问的https://github.com/myusrn/KK.AspNetCore.EasyAuthAuthentication.git,以启用此nuget包的调试内容。使用localhost f5 iisexpress目标不会重现问题。切换到localhost f5 docker目标,当调试url处理命中KK.AspNetCore.EasyAuthAuthentication\Services\EasyAuthWithAuthMeService.cs时,会重现问题|第109行var response = await client.SendAsync(httpRequest);
我想知道是否有一些Dockerfile设置,我需要作出,以使这个f5调试localhost相对url请求的asp.net核心web应用程序启动代码。

n8ghc7c1

n8ghc7c11#

我使用的是相同的ASP.NET Core Docker版本,如果您这样做,它似乎可以正常工作:
替换http://localhost:<port>

http://host.docker.internal:<port>
再试一次,检查它是否适合你!

raogr8fs

raogr8fs2#

要从IIS ExpressSelfHostDocker访问资源,您可以使用Http请求配置HttpClient.BaseAddress,如下所示:

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();
    }
}

相关问题