ASP.NET MVC:アクションでAJAX要求を強制します
-
09-10-2019 - |
質問
AJAXリクエストを介してのみアクセスするためのコントローラーのアクションを実施する方法を探しています。
アクションメソッドが呼び出される前にこれを行う最良の方法は何ですか? アクション方法から以下をリファクタリングしたい:
if(Request.IsAjaxRequest())
// Do something
else
// return an error of some sort
私が想像しているのはです ActionMethodSelectorAttribute
のように使用できます [AcceptVerbs]
属性。しかし、私はそのようなカスタム属性をクレートする経験がありません。
解決
OnActionExecuteを発射するActionFilterを作成します
public class AjaxActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.Result = new RedirectResult(//path to error message);
}
}
フィルターの結果プロパティを設定すると、ActionMethodの実行が妨げられます。
その後、ActionMethodsの属性として適用できます。
他のヒント
これと同じくらい簡単です:
public class AjaxOnly : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
return controllerContext.HttpContext.IsAjaxRequest();
}
}
IsajaxRequest()がどこから来たのかを忘れてしまいます。私はその方法を「失った」コードから貼り付けています。 ;)
所属していません StackOverflow