ASP.NET Core WebアプリケーションでURLごとに異なる処理を実行する - URLルーティングの実装 - C#

ASP.NET Core WebアプリケーションでURLごとに異なる処理を実行するコードを紹介します。

概要

ASP.NET Core WebアプリケーションでURLルーティングを実装して、URLごとに別の処理を実行したい場合があります。この記事ではASP.NET Core WebアプリケーションでのURLルーティングのコードを紹介します。
ASP.NET Core WebアプリケーションではApplicationBuilderのMapメソッドを利用してURLルーティングを実装します。

プログラム

ASP.NET Core Webアプリケーションを作成します。空のASP.NET Core 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;

namespace SimpleMap
{
  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, IHostingEnvironment env)
    {
      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }

      app.Map("/penta", HandleMapPenta);
      app.Map("/penzaburo", HandleMapPenzaburo);

      app.Run(async (context) =>
      {
        await context.Response.WriteAsync("Hello World!");
      });
    }

    private static void HandleMapPenta(IApplicationBuilder app)
    {
      app.Run(async context =>
      {
        await context.Response.WriteAsync("Hello Penta!");
      });
    }

    private static void HandleMapPenzaburo(IApplicationBuilder app)
    {
      app.Run(async context =>
      {
        await context.Response.WriteAsync("Hello Penzaburo!");
      });
    }
  }
}

解説

コードの大部分は空のASP.NET Core Webアプリケーションのコードと同様です。
下記のコードが追記になります。ApplicationBuilder オブジェクトのMapメソッドを呼び出しマッピングURLとハンドラーを追加します。下記のコードでは (アプリケーションルートURL)/penta のURLにアクセスした場合は HandleMapPenta メソッドを呼び出します。また、 (アプリケーションルートURL)/penzaburo のURLにアクセスした場合は HandleMapPenzaburoメソッドを呼び出します。
      app.Map("/penta", HandleMapPenta);
      app.Map("/penzaburo", HandleMapPenzaburo);

ハンドラーの実装が下記のコードになります。HandleMapPenta メソッドでは、"Hello Penta!" のメッセージをレスポンスとして返します。
    private static void HandleMapPenta(IApplicationBuilder app)
    {
      app.Run(async context =>
      {
        await context.Response.WriteAsync("Hello Penta!");
      });
    }

HandleMapPenzaburoメソッドでは、"Hello Penzaburo!" のメッセージをレスポンスとして返します。
    private static void HandleMapPenzaburo(IApplicationBuilder app)
    {
      app.Run(async context =>
      {
        await context.Response.WriteAsync("Hello Penzaburo!");
      });
    }

実行結果

プロジェクトを実行します。Webブラウザが起動し、アプリケーションルートのURLが表示されます。画面には "Hello World!" のメッセージが表示されます。


アドレスバーのURLを編集して (アプリケーションのルートURL)/penta に変更してアクセスします。下図の画面が表示されます。画面には "Hello Penta!" のメッセージが表示されます。マッピングに登録したURLでハンドラーの処理が実行されていることが確認できます。


URLを (アプリケーションのルートURL)/penzaburo に変更してアクセスします。下図の画面が表示されます。画面には "Hello Penzaburo!" のメッセージが表示されます。ハンドラーが実行できています。


マッピングに登録されていないURLにアクセスした場合は、デフォルトの"Hello World!" のメッセージが画面に表示されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2019-08-16
iPentec all rights reserverd.