针对本地主机相对 url 的请求"Cannot assign requested address"



我有一个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目标进行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目标,问题不会重新解决。切换到localhost f5 docker目标,当调试url处理命中KK.AspNetCore.EasyAuthAuthenticationServicesEasyAuthWithAuthMeService.cs|var response = await client.SendAsync(httpRequest);行时,问题会重新出现。

我想知道是否有一些Dockerfile设置需要通过asp.net核心web应用程序启动代码来启用这个f5调试localhost相对url请求。

我使用的是相同的ASP.NET Core docker版本,如果你这样做,它似乎可以工作:

更换http://localhost:<port>

带有

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

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

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

相关内容

  • 没有找到相关文章

最新更新