ASP.NET Coreで常にHTTPSにリダイレクトする
2017-07-23 11:37:28 +0900 JST
Categories: ASP.NET Core
従来のASP.NETではweb.configをたくさんいじってあれこれ設定していましたが、ASP.NET CoreからはほとんどをStartup.csに記述するようなりました。
個人的にもそのほうがコンパイルエラーで設定ミスとかが分かるのでこっちのほうが好きですね。
環境
- .net core 1.1
HTTPSにリダイレクトする
Rewriteのインストール
HTTPでアクセスしたときにHTTPSへリダイレクトするのもStartup.csで設定するようになりました。
まずはNugetからリダイレクトするライブラリをインストールします。
NugetでMicrosoft.AspNetCore.Rewrite
を検索してインストールします。あるいはcsprojに直接書いてもOKです。
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Rewrite" Version="1.0.2" />
</ItemGroup>
csprojに直接書いた場合はdotnet restore
コマンドを忘れずに実行しましょう。
リダイレクト設定
Startup.csで編集する箇所は2か所です。
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseRewriter(new RewriteOptions().AddRedirectToHttps());
app.UseMvc();
}
上ではASP.NET Core全体にHTTPSを必須とする属性を追加します。
下ではHTTPでアクセスしたときにHTTPSでリダイレクトするように設定をしています。
Azure App ServicesではHTTPも受け付けますが、これでAzureにアップロードするとHTTPでアクセス時にHTTPSにリダイレクトされるようになります。
Googleのチェックツールを使うとHTTPからHTTPSにリダイレクトできていることが検証できます。
プロダクション時だけONにする
Startup.csでは現在がどのモードで動作しているかが取得できるので、Production時だけの処理を簡単に書けます。
if (env.IsProduction())
{
app.UseRewriter(new RewriteOptions().AddRedirectToHttps());
}
またはappsettings.jsonの値を見るようにしても良いと思います。