我目前正在开发一个项目,我想在服务器上使用它来实现两个不同的目的,即测试模式和发布模式。我正在使用AspNet核心和中间件管道来尝试实现这一目标。我想要任何东西" /测试"在网址中做一件事,其他一切都做另一种模式。通常我知道如何解决这些问题,因为AspNet Core中间件允许使用app.Map(" / Test",...)映射到路径,但问题是它们都使用相同的管道,只是不同依赖注入/ IoC容器。从我看来,ConfigureServices方法在Configure方法之前运行,并且没有为每个请求路径配置要使用的服务。所以我只需要一种方法来拥有相同的管道,但不同的请求对IoC容器使用不同的服务。
答案 0 :(得分:0)
我不建议你这样做,你只是让你的工作更难。
而是使用ASP.NET Core提供的功能:特定于环境的配置。为此,您需要运行两个不同的应用程序,但设置仍然可以在同一个项目中,您只需更改环境变量。
为此,首先需要launchSettings.json
的设置。
文档中的示例
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:40088/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNET_ENV": "Development"
}
},
"web": {
"commandName": "web",
"environmentVariables": {
"Hosting:Environment": "Staging"
}
}
}
}
此处环境设置为“暂存”。接下来,您需要为其定义配置。
using Microsoft.AspNet.Builder;
namespace Environments
{
public class StartupStaging
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}
namespace Environments
{
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}
现在,当您的环境设置为Production
时,将调用Startup
类(如果存在,则调用StartupProduction
)。如果您的环境变量设置为Staging
,则会调用StartupStaging
。
对于不同的网址...在您的生产应用程序中,您将其设置为
"iisExpress": {
"applicationUrl": "http://example.com/",
"sslPort": 0
}
和您的测试环境
"iisExpress": {
"applicationUrl": "http://example.com/Test/",
"sslPort": 0
}
代码/配置代码段取自ASP.NET Core Docs。或者只使用hosting.json
用于不同的环境。
hosting.json
{
"server": "Microsoft.AspNet.Server.Kestrel",
"server.urls": "http://example.com/"
}
我认为您还可以拥有多个名为hosting.production.json
等的文件。