ASP.NET Core WebAPIでHttpヘッダーの特定のキーの値を取得する。
はじめに
リクエストで送られてくる際にHttpヘッダーの特定のキーの値を用いて認証することがあると思います。 今回はASP.NET Core WebAPIプロジェクトを例にしてHttpヘッダーのTESTキーの値を取得してみます。
テンプレートの用意と動作確認
ASP.NET Core WebAPIプロジェクトを立ち上げます。
テンプレートで用意されているWeatherForecastController.csは以下のようになっています。
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; namespace WebApplication1.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } [HttpGet] public IEnumerable<WeatherForecast> Get() { var rng = new Random(); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }) .ToArray(); } } }
まずはそのままビルドし、実行してみます。
立ち上がりました。 次にこちらへGetメソッドでリクエストを送ってみます。
APIが正常に終了し、データが返却されたことを確認できました。
HttpヘッダーのTESTキーに値が入っている場合のみデータが返却されるようにする
さて、それでは本題であるHttpヘッダーの特定のキーの値を取得する方法を書いていこうと思います。 認証的にはとてつもなくダメダメな例ではありますが、TESTキーに値が入っている場合はデータが返却され、入っていない場合は401エラー(Unauthorized)が返却される仕様を例にサンプルコードを書いていきましょう。
Httpヘッダーの特定のキーの値を取得する際は以下のHttpRequest.Headersプロパティを利用します。
こちらを用いると先ほど記載したテンプレート(WeatherForecastController.cs)のGetメソッドは以下のように書けます。
[HttpGet] // エラー時の対処のために戻り値の型をActionResultで囲っています。 public ActionResult<IEnumerable<WeatherForecast>> Get() { //ControllerBaseクラスを継承しているため、その中のRequestプロパティを利用。 Request.Headers.TryGetValue("TEST", out var extractedApiKey); if (string.IsNullOrEmpty(extractedApiKey)) { return Unauthorized(); } var rng = new Random(); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }) .ToArray(); }
動作を確認してみましょう。
TESTキーをセットしていない場合
TESTキーをセットしていない場合は401エラーで落ちます。
TESTキーをセットした場合
TESTキーをセットした場合は値が返却されていることが分かります。
おわりに
以上、Httpヘッダーの特定のキーから値を取得する方法でした。 同様の処理を行う方々の参考になれば幸いです。