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アプリケーションの作成手順は
こちらの記事を参照してください。プロジェクトの作成後、下記のコードを記述します。
コード
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を愛用