【问题标题】:ASP.Net Core different web.config by environmentASP.Net Core 不同的 web.config 按环境
【发布时间】:2017-03-11 00:00:45
【问题描述】:

在 ASP.Net Core 中,我可以通过提供多个 appsettings..json 文件为不同的环境设置不同的应用程序设置。但是如何才能为不同的环境提供不同的 web.config 文件呢?

【问题讨论】:

  • ASP.Net Core 不使用 web.config 文件。您要更改什么配置?
  • 感谢@DavidG。我需要 web.config 不是用于 ASP.Net Core 本身,而是用于我要部署到的 IIS。我的环境需要稍微不同的 IIS 设置。
  • 将 web.config 文件部署到生产环境后,您可以将其排除在发布之外,这样开发副本就不会覆盖它
  • @JoeAudette 我们的环境不是静态的。它们都在 AWS 中(开发机器上的开发除外),并在每次部署时使用 CloudFormation 脚本重新构建,因此整个 Web 服务器都是从头开始重新创建的。此外,不仅仅是 dev 和 prod,我们至少有 4 个环境:dev、test、UAT、prod。
  • 这是github.com/aspnet/Home/issues/2019github 上的未解决问题

标签: asp.net-core web-config


【解决方案1】:

我遇到了同样的问题。 最后在网上搜索后,我得出结论 web.config 对于 ASP.NET Core(中间件方法)来说已经过时了。 实际上,您想要使用 WEB.CONFIG(用于 IIS)的操作应该使用 ASP.NET Core app.config 或自定义中间件(新理念)来完成。

在我的情况下,我必须在我的 web.config(仅适用于具有 SSL 的生产环境)中放入以下部分:

<httpProtocol>
  <customHeaders>
    <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
  </customHeaders>
</httpProtocol>

因为 WEB.CONFIG 对于 ASP.NET Core 来说已经过时了(当然你仍然可以使用它)。您必须使用 app.config 或中间件方法(两者都可以互补)。这是我用中间件代码替换 web.config 的示例。

在 Startup.cs(此文件是您的项目根目录)中,您必须注册您的自定义中间件 - 只需添加 1 行 (app.UseMyCustomMiddleware),如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{    
    ...
    if (env.IsDevelopment())
    {
      ...
    }
    else
    {
      ...            
      app.UseMyCustomMiddleware();
    }
    ...
}

MyCustomMiddleware 类的实现应该是这样的(为了清楚起见,我将 2 个类放在同一个文件中):

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;

namespace MyWeb  // Change this name to match your project name if needed
{
    public static class MyCustomMiddlewareExtensions
    {
        public static IApplicationBuilder UseMyCustomMiddleware(this IApplicationBuilder app)
        {
            return app.UseMiddleware<MyCustomMiddleware>();
        }
    }
    public class MyCustomMiddleware
    {
        private readonly RequestDelegate _next;

        public MyCustomMiddleware(RequestDelegate next)
        {
            this._next = next;
        }

        public async Task Invoke(HttpContext context)
        {
            // Put your code here (at my concern, i need the code below)
            context.Response.Headers.Add("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");

            // Very important
            await _next(context);
        }
    }
}

希望我的解释和示例对您有所帮助。

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 2017-11-01
    • 2022-11-16
    • 2020-04-15
    • 2018-10-24
    • 2020-01-23
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多