ぷろじぇくと、みすじら。

Browser Platform Status Trackerを.NET Core 2.0に更新した

Created at:

3年ぐらい前からWebブラウザのプラットフォーム機能の開発状況が公開されるようになり、その更新を追いかけて変更内容を一覧するサイトBrowser Platform Status Trackerを公開しています。

最近までASP.NET MVC 5と.NET 4.6で動作していたのですが.NET Coreの機運の高まりを感じたので、.NET Core 2.0 + ASP.NET MVC Core 2.0に移行しました。といっても2か月ぐらい前に一度.NET Core 1.1にして、その後.NET Core 2.0にという感じです。まあそもそもサイトの性質的には動的じゃなくてもいい説もありますがそこは気にせず…。

.NET Core 1.1 + ASP.NET MVC Core化のタイミングで折角なのでHTTPSを有効にして、ドメインもAzureのApp Service(azurewebsites.net)だったので platformstatus.io というドメインへも変更しています。

サイト自体はコンパクトなのでASP.NET Coreへの移行は大した苦労はなかったのですが、やはりRazorテンプレートにヘルパーがなくなった所に関しては既存のASP.NET MVCのアプリを移行する際のハードルになると感じました。数が少ない場合には頑張ってPartialにすればよいのですが、ヘビーに使っている場合には使い勝手も違うので移行不能に近い状態になりそうです。

気づいたこととか

ASP.NET Core 2.0でリバースプロキシの後ろにある場合にスキームを維持したい

Created at:

ASP.NET Core 2.0でアプリケーションがリバースプロキシの後ろにあるケースで、リバースプロキシがHTTPSで受け、アプリにはHTTPで受け渡すような構成というのはよくあるかと思います。

しかしASP.NET Coreは標準のままでは Request.Scheme には”http”が入ることになり、”https”が入っていなくて不都合が…という状況が発生します。

そんな時は大抵のリバースプロキシが送り出すであろう X-Forwarded-* ヘッダーフィールドを反映するミドルウェアがあるのでそれを有効にすることで、リバースプロキシにアクセスされた際の情報を維持できます。

その機能を有効にするには UseForwardedHeaders メソッドでミドルウェアを使用するようにし、その際にどのヘッダーフィールドを使うかを指定します。次の例は上位サーバーからのリクエストの X-Forwareded-Proto (スキーム)を見るようにするという設定です。

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto
});