2011-09-13 37 views
0

是否有可能阻止任何其他使用json結果,並只允許來自我的應用程序的請求? 當我們用這樣的:asp.net mvc jsonresult塊外部使用

Json(q, JsonRequestBehavior.AllowGet) 

它允許從anywhere.is有任何認證存在以檢查需求是來自所有的請求?

+0

btw ..它表明你只有33%的問題回答率。我會將你的一些老問題標記爲回答,以便人們更有可能在未來幫助你:) –

回答

1

將[Authorize]屬性添加到要保護的方法或控制器。您可以指定組成員身份,並且需要登錄。

+0

我認爲他意味着停止一個不是ajax請求的請求,但是不能從文本中清除。 – awrigley

+0

雅,但操作引用身份驗證? –

2

我想你的意思:

如何只允許AJAX請求?

如果是這樣,查看以下博客帖子。它描述了創建可重複使用的過濾器:

AjaxOnly attribute

代碼似乎很簡單,但我沒有用它自己:

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 

結果,我已經修改的代碼,併產生附加了任意錯誤路由的一種簡單的方法(以「/錯誤/ 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() 
{ 
    //.... 
} 
0

如果你只想要一個方法,通過自己的應用程序可以被調用,從公衆改變方法聲明爲內部:現在可以如下使用。這將限制方法的範圍從應用程序中調用。