针对本地主机相对网址“无法分配请求的地址”的请求

时间:2018-12-28 05:55:07

标签: c# docker dockerfile asp.net-core-webapi dotnet-httpclient

我有一个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/上启动时,我尝试针对相对网址/data/some.json发出HttpClient.SendAsync()请求,以获取数据,从而使localhost调试能够模拟仅在已发布的安全状态应用案例。

当我使用项目的IISExpress目标进行f5调试时,一切正常。当我针对Docker目标进行f5调试时,针对localhost相对URL或完全限定的https://localhost:44301/data/some.jsonhttp://localhost:8081/data/some.json路径的HttpClient.SendAsync()调用会生成带有消息Cannot assign requested address的异常。如果我更改代码以从远程URL加载some.json,例如存储帐户公用blob路径,则f5调试Docker目标不会在此调用中失败。

使用https://github.com/myusrn/adncauthexploration.git提供的AzWebApp1项目可以再次出现问题,该项目也需要使用项目参考进行访问的https://github.com/myusrn/KK.AspNetCore.EasyAuthAuthentication.git,才能调试此nuget软件包的内容。使用localhost f5 iisexpress target不会出现此问题。当调试URL处理达到KK.AspNetCore.EasyAuthAuthentication\Services\EasyAuthWithAuthMeService.cs |时,切换到localhost f5 docker可以解决问题。第109行var response = await client.SendAsync(httpRequest);

我想知道是否需要做一些Dockerfile设置才能通过asp.net核心Web应用启动代码启用此f5调试localhost相对URL请求。

2 个答案:

答案 0 :(得分:4)

我使用的是相同的ASP.NET Core docker版本,并且似乎可以按照以下说明进行操作:

http://host.docker.internal:<port>

再试一次,检查是否适合您!

答案 1 :(得分:0)

要从IIS ExpressSelfHostDocker访问资源,您可以使用Http Request配置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();
    }
}