我有一个Visual Studio 2017 [/ 2019] asp.net核心Web应用程序项目,它使用FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
和FROM 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.json
和http://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请求。
答案 0 :(得分:4)
我使用的是相同的ASP.NET Core docker版本,并且似乎可以按照以下说明进行操作:
http://host.docker.internal:<port>
再试一次,检查是否适合您!
答案 1 :(得分:0)
要从IIS Express
,SelfHost
和Docker
访问资源,您可以使用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();
}
}