質問

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()がどこから来たのかを忘れてしまいます。私はその方法を「失った」コードから貼り付けています。 ;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top