ASP.NET Core のミドルウェアでURLごとに異なる処理を実装する - Mapメソッドの利用 - ASP.NET Core

ASP.NET Core のWebアプリケーションでURLの違いにより処理を変更するコードを紹介します。

概要

ASP.NET CoreのWebアプリケーションでURLの違いにより処理を変更したいことがあります。URLの違いで処理を分ける場合はMapメソッドを利用します。この記事ではMapメソッドを利用してURLごとにWebアプリケーションの処理を変更するコードを紹介します。

プログラム例

コード

Startup.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace SimpleMiddlewareMap
{
  public class Startup
  {
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
      if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
      }

      app.Map("/maptest1", appmap =>
      {
        appmap.Run(async context =>
        {
          await context.Response.WriteAsync("<div>Map1 Response</div>");
        });
      }
      );

      app.Map("/maptest2", appmap =>
      {
        appmap.Run(async context =>
        {
          await context.Response.WriteAsync("<div>Map2 Response</div>");
        });
      }
      );
    }
  }
}

解説

Configureメソッド内の下記のコードがMapメソッドのコードになります。
IApplicationBuilderオブジェクトのMapメソッドを呼び出すことでASP.NET Core Webアプリケーションのマッピングを作成します。Mapメソッドの第一引数にはマップするURLのパスを指定します。下記のコードでは "/maptest1" を与えており、(アプリケーションルートURL)/maptest1 のURLにアクセスしたときの処理を作成します。
Mapメソッドの第二引数がMapされたURLにアクセスしたときの処理を実行するデリゲートを指定します。デリゲートにはMapされたURLでのIApplicationBuilderオブジェクトが引数に与えられます。下記のコードでは、Runメソッドを実行し、"Map1 Response" の文字列をレスポンスとして返しています。
  app.Map("/maptest1", appmap =>
  {
    appmap.Run(async context =>
    {
      await context.Response.WriteAsync("<div>Map1 Response</div>");
    });
  }
  );

同様に /maptest2 のURLに対しても下記のコードで処理を実装しています。
  app.Map("/maptest2", appmap =>
  {
    appmap.Run(async context =>
    {
      await context.Response.WriteAsync("<div>Map2 Response</div>");
    });
  }
  );

実行結果

プロジェクトを実行します。Webブラウザが起動し下図のページが表示されます。
今回のコードではConfigureメソッド内にRunメソッドが実装されていないため、ルートURLではレスポンスが無く、Not Found の404エラーになります。


(アプリケーションルートURL)/maptest1 のURLにアクセスします。下図のページが表示されます。"Map1 Response" のメッセージが表示されていることが確認できます。Mapメソッドで追加したマッピングの処理が実行できていることが確認できます。


同様に (アプリケーションルートURL)/maptest1 のURLにアクセスします。下図のページが表示されます。"Map2 Response" のメッセージが表示されていることが確認できます。


Mapメソッドを利用してURLごとに異なる処理を実装できました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2019-10-20
作成日: 2019-10-17
iPentec all rights reserverd.