C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# ASP.NET Web APIで特定のHTTPメソッドによるアクションメソッドへのアクセスを制限する方法

HTTP動詞(HTTPメソッド)は、RESTの「統一インターフェース」制約の中核を担う重要な要素であり、名詞ベースのリソースに対する「アクション」の役割を果たします。主要なHTTPメソッドとしては、POST、GET、PUT、PATCH、DELETEの5つが挙げられ、それぞれCRUD操作(作成・読み取り・更新・削除)に対応しています。その他にもいくつかのメソッドが存在しますが、使用頻度は低く、その中でもOPTIONSとHEADは比較的よく使われます。

ASP.NET Web APIでは、アクションメソッドの名前をHTTPメソッドに対応させることでルーティングが行われます。たとえばGet、Post、Put、Patch、Deleteといった名前を付ければ、対応するHTTPメソッドで呼び出せるようになります。また、可読性を高めるために、HTTPメソッド名に任意の接尾辞を追加することも可能です。例えば、GETメソッドに対応させるなら「GetAllStudents()」のように、Getで始まる名前を付ければ問題ありません。

命名規則による実装例

public class DemoController : ApiController{
    public IHttpActionResult GetAllStudents(){
        // 学生データを取得
        return Ok();
    }
    public IHttpActionResult Post([FromBody]Student student){
        // 学生データを挿入
        return Ok();
    }
    public IHttpActionResult Put([FromBody]Student student){
        // 学生データを更新
        return Ok();
    }
    public IHttpActionResult Delete(int id){
        // 学生データを削除
        return Ok();
    }
}

Http Verb属性を使ったアクセス制限

メソッド名による規約ではなく、Http Verb属性を使ってアクションメソッドのHTTPメソッドを明示的に指定することもできます。この属性を利用すると、ASP.NET Web APIのアクションメソッドを特定のHTTPメソッドからのみ呼び出せるよう制限することが可能です。

Http Verb属性の実装例

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
    public class DemoController : ApiController{
        [HttpGet] // HttpVerb属性
        public IHttpActionResult FetchStudentsList(){
            List<Student> students = new List<Student>{
                new Student{
                    Id = 1,
                    Name = "Mark"
                },
                new Student{
                    Id = 2,
                    Name = "John"
                }
            };
            return Ok(students);
        }
    }
}

上記のコードでは、FetchStudentsListアクションメソッドに[HttpGet]属性を付与しているため、GETリクエストでのみアクセスできる状態になっています。

許可されていないHTTPメソッドでのアクセス結果

それでは、このアクションメソッドに対してPOSTリクエストを送信してみましょう。

POSTリクエストを送信すると、FetchStudentsListアクションメソッドには[HttpGet]属性が付与されているため、405 Method Not Allowed(許可されていないメソッド)レスポンスが返されることが確認できます。

このように、Http Verb属性を活用することで、意図しないHTTPメソッドからのアクセスを防ぎ、APIの安全性と設計の一貫性を保つことができます。なお、[HttpGet]以外にも[HttpPost]、[HttpPut]、[HttpDelete]、[AcceptVerbs]などの属性があり、用途に応じて柔軟に使い分けることが可能です。

  1. Selenium WebDriverとJavaで特定のウィンドウだけを閉じる方法をわかりやすく解説

    Selenium WebDriverでは、複数開いているウィンドウの中から特定のウィンドウだけを選んで閉じることが可能です。その際に活躍するのがgetWindowHandlesメソッドとgetWindowHandleメソッドです。この2つを組み合わせることで、ポップアップなどの子ウィンドウも柔軟に制御できます。 ウィンドウハンドルの基本 getWindowHandlesメソッドは、現在開いているすべてのウィンドウハンドルを取得し、Set型のコレクションに格納します。一方、getWindowHandleメソッドは、現在フォーカスが当たっているブラウザウィンドウのハンドルのみを返します。Setデー

  2. Windows 10で特定のドライブへのアクセスを制限・非表示にする2つの方法

    Windowsでは、1台のPCに複数のユーザーアカウントを作成して利用できます。家族や友人とパソコンを共有している場合、ファイルやフォルダー、さらにはドライブ単位でプライバシーを守りたいと考える方は少なくありません。ただし、ドライブへのアクセス制限は、ファイルやフォルダーの制限とは設定方法が異なります。専用の設定を行うことで、他のユーザーが別のドライブ上にある個人データへアクセスすることを防げます。本記事では、Windows 10でドライブへのアクセスを制限する主な方法として、「ローカル グループ ポリシー エディター」を使う方法と「レジストリ エディター」を使う方法の2つを詳しく解説します。