0

json 結果の他の使用をブロックし、アプリケーションからのリクエストのみを許可することは可能ですか? 次のようなものを使用する場合:

Json(q, JsonRequestBehavior.AllowGet)

どこからでもすべてのリクエストを許可します。リクエストの送信元を確認するための認証はありますか?

4

3 に答える 3

2

私はあなたが意味すると思います:

AJAX リクエストのみを許可するには?

その場合は、次のブログ投稿をご覧ください。再利用可能なフィルターの作成について説明します。

AjaxOnly 属性

コードは非常に単純に見えますが、私自身は使用していません。

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()
{
   //....
}
于 2011-09-13T08:37:34.190 に答える
1

保護するメソッドまたはコントローラーに [Authorize] 属性を追加します。グループ メンバーシップを指定できます。ログインが必要になります。

于 2011-09-13T04:44:25.600 に答える
0

メソッドを独自のアプリケーションからのみ呼び出せるようにする場合は、メソッド宣言を public から internal に変更します。これにより、メソッドのスコープがアプリケーション内からの呼び出しに制限されます。

于 2011-09-13T10:58:24.580 に答える