aspnet core多环境与IStartupFilter

引言

若文中有图片相关错误可以直接到demo源代码中查看。

为何有这个demo呢?

出自于对多环境开发的支持,IStartupFilter尝试。

多环境

平时的开发中难免会遇到多环境模式,开发的时候使用开发模式、预发布使用预发布模式、生产模式。

1.Configure{Enviroment}

具体的测试参考StartupWithEnviromentConfig中的配置,将其添加到UseStartup<>中进行测试。

测试前进行环境变量设置:

setx ASPNETCORE_ENVIRONMENT "Development"
dotnet run

结果:

StartupWithEnviromentConfig测试结果

2.配置文件

分别建立对应环境的配置文件

  • appsetting.Development.json
  • appsetting.Production.json
  • appsetting.Staging.json
  • appsetting.json(公共配置文件,共同的配置可以放置到该文件中)

这里需要注意一下的就是后面的环境配置文件和公共的配置文件有相同的配置时会被覆盖,没有的会合并

然后在配置中加入:

ConfigureAppConfiguration((context, builder) =>
{
    builder.AddJsonFile("JsonFile/appsetting.json");
    builder.AddJsonFile($"JsonFile/appsetting.{context.HostingEnvironment.EnvironmentName}.json");
})

其实在CreateDefaultBuilder中已经默认做了这件事情,并且还做了很多其他的事情(环境变量、命令行、日志、ServiceProvider)等。

测试结果:
配置文件测试结果

这样可以增对不同的环境做不同的配置环境支撑,是一个很好的选择,也推荐这么做,例如开发环境的数据库配置、测试版本数据库配置等。

IStartupFilter

详细的解释参见官方文档

本示例中我创建了两个中间件进行测试,详情StartFilter文件夹。

自定义Filter需要进行注册

services.AddSingleton<IStartupFilter, MyStartupFilter>();

MyStartupFilter实现

public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
    return app =>
    {
        app.UseMiddleware<AuthticationMiddleware>();
        next(app);
    };
}

注册HttpStatusMiddleware

app.UseMiddleware<HttpStatusMiddleware>();

特意在最后还设置了一个端点

app.UseEndpoints(builder =>
{
    builder.MapGet("login", async context => { await context.Response.WriteAsync("request success!"); });
});

当整个请求管道成功后,也就是HttpStatusMiddleware请求完成后就会进行端点判断,请求get方式并且路由/login就会匹配到。

失败的请求
请求失败
成功的请求
成功的请求

使用IStartupFilter就做到了在请求管道之前附加请求处理。

posted @ 2020-10-21 19:35  Jonny-Xhl  阅读(220)  评论(0)    收藏  举报