Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9703

ASP.NET Core MVC 3.1 雑記 「アクションメソッドをAjax呼び出しに限定する」

$
0
0

はじめに

ASP.NET Core MVC 3.1 雑記となります。
自分が実際に使用したメソッドや手順を、
将来の自分に向けた備忘録として残しています。

今回の流れ

  • Ajax呼び出しを判定するメソッドを作成
  • Ajax呼び出しであるかを検証するアクションセレクターを作成
  • アクションメソッドに適用

今回のゴール

  • 特定のアクションメソッドをAjax呼び出しに限定できる

環境

IDE
Visual Studio 2019
言語
C#

Ajax呼び出しを判定するメソッドを作成

HttpRequest クラスの拡張メソッドとして作成しました。
Headerの「X-Requested-With」が "XMLHttpRequest" であればAjax呼び出しとみなします。
より良い判定方法があれば知りたいです。

/// <summary>/// <see cref="HttpRequest"/> クラスの拡張メソッドを提供するクラスです。/// </summary>publicstaticclassHttpRequestExtensions{privateconststringAjaxRequestHeaderItem="X-Requested-With";privateconststringAjaxRequestHeaderValue="XMLHttpRequest";/// <summary>/// Ajaxによるリクエストかどうかを取得します。/// </summary>/// <param name="self"><see cref="HttpRequest"/></param>/// <returns>Ajaxによるリクエストである場合は true それ以外は false</returns>publicstaticboolIsAjaxRequest(thisHttpRequestself){if(self==null){thrownewArgumentNullException(nameof(self));}returnself.Headers!=null&&self.Headers[AjaxRequestHeaderItem]==AjaxRequestHeaderValue;}}

Ajax呼び出しであるかを検証するアクションセレクターを作成

上記の IsAjaxRequest メソッドを呼び出して検証します。

/// <summary>/// Ajax呼び出しであるかを検証するアクションセレクターです。/// </summary>publicclassAjaxOnlyAttribute:ActionMethodSelectorAttribute{/// <summary>/// <inheritdoc/>/// </summary>publicoverrideboolIsValidForRequest(RouteContextrouteContext,ActionDescriptoraction){returnrouteContext.HttpContext.Request.IsAjaxRequest();}}

対象のアクションメソッドに属性として付与

[HttpPost][AjaxOnly][ActionName("filterIndex")]publicIActionResultIndex(stringkeyWord){//省略}

これで、AjaxOnlyAttribute を付与したアクションメソッドはAjax経由でなければ呼び出せないようになりました。


Viewing all articles
Browse latest Browse all 9703

Trending Articles