ASP.NET Core 2.1 コード ベースへの移行

# ASP.NET Core 2.0 から 2.1 への変更点

[ASP.NET Core 2.1 への移行](https://qiita.com/hiromasa-masuda/items/91976dca16f05e96410a) という記事を書きましたが、Visual Studio から、ASP.NET Core MVC アプリケーションを新規作成した際に作成されるコード ベースも変更されているようです。

ざっと確認した感じでは、おもにセキュリティ系の変更となっていました。

ここでは、ASP.NET Core 2.0 MVC から、ASP.NET Core 2.1 MVC のコード ベースの変更を説明します。

詳しくは、以下に記載がありますので、こちらも参考にしてください。

* [Migrate from ASP.NET Core 2.0 to 2.1
](https://docs.microsoft.com/en-us/aspnet/core/migration/20_21?view=aspnetcore-2.1)

# ASP.NET Core 2.0 コード ベースの変更

以下に、変更点を記載します。

コメントされているコードが古いコードベースです。

```csharp:Program.cs

namespace WebApp001
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //BuildWebHost(args).Run();
            CreateWebHostBuilder(args).Build().Run();
        }

        //public static IWebHost BuildWebHost(string[] args) =>
        //    WebHost.CreateDefaultBuilder(args)
        //        .UseStartup<Startup>()
        //        .Build();
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}
```

```csharp:Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; //2.1 コードベース追加
using Microsoft.AspNetCore.Mvc; //2.1 コードベース追加
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace WebApp001
{
    public class Startup
    {

        public void ConfigureServices(IServiceCollection services)
        {
            //GDPR 対応のため
            //https://docs.microsoft.com/en-us/aspnet/core/security/gdpr?view=aspnetcore-2.1
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            //services.AddMvc();
            services.AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }
        
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                //2.1 コードベースでは、UseBrowserLink は削除 
                //app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                //2.1 コードベース追加
                app.UseHsts();
            }

            app.UseHttpsRedirection(); //2.1 コードベース追加
            app.UseStaticFiles();
            app.UseCookiePolicy();//2.1 コードベース追加

            app.UseMvc();
        }
    }
}

```


##UseHttpsRedirection 

UseHttpsRedirection により、強制的に HTTP 要求を HTTPS へリダイレクトします。

ただし、HTTPS のポートの定義がある場合のみリダイレクトが行われます。

ポートの定義がない場合は、以下のような警告が出力されます。

Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware:Warning: Failed to determine the https port for redirect.

コードでポートの定義をする場合は、ConfigureServices　メソッドに以下のように記載します。

```csharp:Startup.cs

services.AddHttpsRedirection(options =>
{
    options.HttpsPort = 8081;
});

```

Visual Studio + IIS Express の環境の場合は、launchSettings.json の iisSettings.iisExpress.sslPort の値が参照されます。

また、環境変数 ASPNETCORE_HTTPS_PORT により、ポート番号を定義することもできます。

#その他の変更点

[Migrate from ASP.NET Core 2.0 to 2.1
](https://docs.microsoft.com/en-us/aspnet/core/migration/20_21?view=aspnetcore-2.1) にもその他の変更点の詳細の記載があります。

その他の変更点も認証などセキュリティ系の更新がほとんどとなっています。

他の個所は、今後、徐々に移行をすすめていこうと考えていますので、その際は、記載を行う予定です。