json 結果の他の使用をブロックし、アプリケーションからのリクエストのみを許可することは可能ですか? 次のようなものを使用する場合:
Json(q, JsonRequestBehavior.AllowGet)
どこからでもすべてのリクエストを許可します。リクエストの送信元を確認するための認証はありますか?
json 結果の他の使用をブロックし、アプリケーションからのリクエストのみを許可することは可能ですか? 次のようなものを使用する場合:
Json(q, JsonRequestBehavior.AllowGet)
どこからでもすべてのリクエストを許可します。リクエストの送信元を確認するための認証はありますか?
私はあなたが意味すると思います:
AJAX リクエストのみを許可するには?
その場合は、次のブログ投稿をご覧ください。再利用可能なフィルターの作成について説明します。
コードは非常に単純に見えますが、私自身は使用していません。
public class AjaxOnlyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.HttpContext.Response.Redirect("/error/404");
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
その後、コントローラーとアクションに適用できます。
[AjaxOnly]
public ActionResult AjaxActionMethod()
{
//....
}
フィルター コードは、次のルートで到達できるコントローラーにアクションが存在することを前提としています。
/error/404
その結果、コードを修正し、任意のエラー ルートを追加する簡単な方法を作成しました (デフォルト値は "/error/404"):
public class AjaxOnlyAttribute : ActionFilterAttribute
{
public AjaxOnlyAttribute(){}
public AjaxOnlyAttribute(string ErrorRoute)
{
this.ErrorRoute = ErrorRoute;
}
string errorRoute = "/Error/404"; // default route
public string ErrorRoute
{
get { return errorRoute; }
set { errorRoute = value; }
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.HttpContext.Response.Redirect(this.ErrorRoute); //
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
これは次のように使用できるようになりました。
[AjaxOnly(ErrorRoute = "/MyArbitraryRoute/MyArbitraryParameter")
public ActionResult AjaxActionMethod()
{
//....
}
保護するメソッドまたはコントローラーに [Authorize] 属性を追加します。グループ メンバーシップを指定できます。ログインが必要になります。
メソッドを独自のアプリケーションからのみ呼び出せるようにする場合は、メソッド宣言を public から internal に変更します。これにより、メソッドのスコープがアプリケーション内からの呼び出しに制限されます。