.NET Aspire 是有主见的云就绪堆栈,用于生成可观察的、生产就绪的分散式应用程序。 它基于 .NET 构建,提供用于生成 Web 应用程序的现代、快速且可缩放的平台。
若要将开发代理用于 .NET Aspire 应用程序,请使用 DevProxy.Hosting NuGet 包。 该包提供开发代理 .NET Aspire 扩展,方便将开发代理集成到 .NET Aspire 应用程序中。
安装开发代理 .NET Aspire 扩展 NuGet 包
若要安装开发代理 .NET Aspire 扩展 NuGet 包,请在 .NET Aspire 应用程序的根文件夹中运行以下命令:
dotnet add package DevProxy.Hosting
使用开发代理 .NET Aspire 扩展包,可以从本地安装的可执行文件或 Docker 容器集成开发代理。
从本地安装的可执行文件中集成 Dev Proxy
如果在本地安装了开发代理,则将其集成到 .NET Aspire 应用程序中的最方便方法是引用本地可执行文件。 以下代码片段演示如何将本地安装的可执行文件中的开发代理与 .NET Aspire 初学者应用程序集成。
重要
将开发代理配置为使用本地可执行文件时,请确保可执行文件在运行应用程序的所有计算机上都可用。 如果要在容器化环境中使用开发代理,请考虑改用 Docker 容器。
using DevProxy.Hosting;
var builder = DistributedApplication
.CreateBuilder(args);
// Add an API service to the application
var apiService = builder.AddProject<Projects.AspireStarterApp_ApiService>("apiservice")
.WithHttpsHealthCheck("/health");
var devProxy = builder.AddDevProxyExecutable("devproxy")
.WithConfigFile(".devproxy/config/devproxy.json")
.WithUrlsToWatch(() => [$"{apiService.GetEndpoint("https").Url}/*"]);
// Add a web frontend project and configure it to use Dev Proxy
builder.AddProject<Projects.AspireStarterApp_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithHttpsHealthCheck("/health")
.WithEnvironment("HTTPS_PROXY", devProxy.GetEndpoint(DevProxyResource.ProxyEndpointName))
.WithReference(apiService)
.WaitFor(apiService)
.WaitFor(devProxy);
// Build and run the application
builder.Build().Run();
首先,使用开发代理 .NET Aspire 扩展,将开发代理服务添加到应用程序。 该方法 AddDevProxyExecutable
指定开发代理可执行文件的名称。 使用该方法 WithConfigFile
,可以指定开发代理配置文件的路径。 使用WithUrlsToWatch
方法指定要监视的 URL 列表。 在此示例中,你希望开发代理截获 Web 应用向 API 服务发出的请求。
重要
请注意,该方法 WithUrlsToWatch
接受返回要监视的 URL 列表的函数。 这是因为配置开发代理时 API 服务终结点不可用,因此无法直接传递 URL。 而是使用 lambda 表达式,该表达式在 API 服务可用时返回该 API 服务的 URL。
接下来,在 Web 应用中,使用 HTTPS_PROXY
环境变量将 Web 应用配置为使用开发代理。 使用WaitFor
方法,您指示 Web 应用在开始之前等待开发代理可用。
将 Dev Proxy 从 Docker 容器中集成出来
或者,可以从 Docker 容器将开发代理集成到 .NET Aspire 应用程序。 使用 Dev Proxy Docker 镜像很方便,因为如果本地没有可用的镜像,.NET Aspire 会自动拉取。 不利的一面是,在应用程序中配置开发代理需要多做几个步骤。
以下代码片段演示如何将 Docker 容器中的开发代理与 .NET Aspire 初学者应用程序集成。
using DevProxy.Hosting;
var builder = DistributedApplication
.CreateBuilder(args);
// Add an API service to the application
var apiService = builder.AddProject<Projects.AspireStarterApp_ApiService>("apiservice")
.WithHttpsHealthCheck("/health");
// Add Dev Proxy as a container resource
var devProxy = builder.AddDevProxyContainer("devproxy")
// specify the Dev Proxy configuration file; relative to the config folder
.WithConfigFile("./devproxy.json")
// mount the local folder with PFX certificate for intercepting HTTPS traffic
.WithCertFolder(".devproxy/cert")
// mount the local folder with Dev Proxy configuration
.WithConfigFolder(".devproxy/config")
// let Dev Proxy intercept requests to the API service
.WithUrlsToWatch(() => [$"{apiService.GetEndpoint("https").Url}/*"]);
// Add a web frontend project and configure it to use Dev Proxy
builder.AddProject<Projects.AspireStarterApp_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithHttpsHealthCheck("/health")
// set the HTTPS_PROXY environment variable to the Dev Proxy endpoint
.WithEnvironment("HTTPS_PROXY", devProxy.GetEndpoint(DevProxyResource.ProxyEndpointName))
.WithReference(apiService)
.WaitFor(apiService)
.WaitFor(devProxy);
// Build and run the application
builder.Build().Run();
基本步骤与使用本地安装的可执行文件时相同。 主要区别在于如何指定配置文件和证书来截获 HTTPS 流量。
从 Docker 容器集成开发代理时,需要将本地文件夹与配置文件和证书装载到容器中。 在此示例中,在 .NET Aspire 解决方案中,你有以下文件夹结构:
AspireStarterApp
├── .devproxy
│ ├── cert
│ │ └── rootCert.pfx
│ └── config
│ └── devproxy.json
├── Projects
│ ├── AspireStarterApp_ApiService
│ └── AspireStarterApp_Web
└── AspireStarterApp.sln
该 cert
文件夹包含开发代理用于截获 HTTPS 流量的个人信息交换(PFX)证书。
重要
必须信任计算机上的文件夹中的 cert
证书,否则对 API 服务的请求将失败。 此外,要使开发代理加载证书,它必须采用 PFX 格式,必须命名 rootCert.pfx
,并且不得使用密码进行保护。
该 config
文件夹包含开发代理配置文件和其他开发代理文件,例如模拟或错误。
由于将证书和配置文件装载到容器中的单独卷,因此它们必须存储在单独的文件夹中。
将开发代理与 .NET Aspire 入门应用程序配合使用
启动应用程序后,开发代理在应用程序中显示为资源。
使用 Web 应用程序以便向 API 服务发出请求时,开发代理会截获请求并根据配置进行处理。 可以在 .NET Aspire 仪表板的 “控制台 ”部分中查看开发代理输出。