tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

運用しているサイトで使っている.Net Coreのミドルウェア

f:id:tekitoumemo:20180610201124p:plain

mygkrnk.com
地味ーな努力と運によってSEO4位(「洋楽ランキング」で)まで行きました。今月は12KPVまで行く見込みで、予想よりはるかに上回りました。

ということで、.Net Coreで作っているみんなの洋楽ランキングで使っているミドルウェアの紹介します。正直、超スモールサイトなので結構少ないです。

セッション管理

.Net Coreのセッション管理は「Microsoft.AspNetCore.Session」を使います。

Microsoft.AspNetCore.Session」をインストール

dotnet add package Microsoft.AspNetCore.Session --version 2.1.0

Startup.csに以下が必要です。

using Microsoft.Extensions.DependencyInjection;
...
public void ConfigureServices (IServiceCollection services) {
services.AddDistributedMemoryCache ();
services.AddSession ();
...
}
...
public void Configure (IApplicationBuilder app, IHostingEnvironment env) {
...
app.UseSession ();
...
}

URLを小文字にする

ここらへんはMVCでも同じですね。

public void ConfigureServices (IServiceCollection services) {
    services.Configure<RouteOptions> (options => {
        options.LowercaseUrls = true;
    });
}

エラー系ミドルウェア

エラーハンドリングの記事を書いたので以下を参考にしてください。
tekitoumemo.hatenablog.com
tekitoumemo.hatenablog.com

静的ファイルを使う系

みんなの洋楽ランキングはファイルサーバーとWEBサーバーを併用してるのでwwwrootにアクセスする必要がありました。なのでwwwrootのファイルを扱えるようにします。

using Microsoft.Extensions.FileProviders;
public void ConfigureServices (IServiceCollection services) {
services.AddSingleton<IFileProvider> (
    new PhysicalFileProvider (
    Path.Combine (Directory.GetCurrentDirectory (), "wwwroot")));
...
}
public void Configure (IApplicationBuilder app, IHostingEnvironment env) {
     app.UseStaticFiles ();
     ....
}

本当はファイルサーバー用意してやった方が良いけど、コストがかかるのでとりあえずと言う感じ。

リダイレクト

azureドメインから本ドメインにリダイレクトするためのミドルウェアです。IISのパターンのみ。Apacheの場合はAddApacheModRewriteを使えばよいです。
まずはwwwroot直下にIISUrlRewrite.xmlを用意します(名前はなんでも良いっぽいです。)。
IISUrlRewrite.xmlは以下のように設定しました。

<rewrite>
    <rules>
        <rule name="mygkrnk.azurewebsites.net" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^mygkrnk\.azurewebsites\.net$" />
            </conditions>
            <action type="Redirect" url="https://mygkrnk.com/{R:1}" redirectType="Permanent" />
        </rule>
    </rules>
</rewrite>

次にStartup.csに以下を設定します。

using (StreamReader iisUrlRewriteStreamReader = File.OpenText (Path.Combine (Directory.GetCurrentDirectory (), "wwwroot", "IISUrlRewrite.xml"))) {
    var options = new RewriteOptions ()
        .AddIISUrlRewrite (iisUrlRewriteStreamReader);
    app.UseRewriter (options);
}

公式に書いてあるのでそれ通りやった感じですね。
docs.microsoft.com

.Net Core2.1 MVCの互換性レベルの指定

.Net Core2.1rcから.Net Core2.1にアップデートしたので、その対応です。これは別の記事にする予定です。

services.AddMvc ()
    .SetCompatibilityVersion (CompatibilityVersion.Version_2_1);