2013-03-06 93 views
2

是否可以將我的操作方法的控制器操作訪問權限制爲僅限AJAX請求?僅限網站的控制器操作

我的意思是一個非Ajax請求來執行它將被重定向到404或拋出錯誤。 Action只會返回正確的結果,如果請求是由JS在我自己的頁面上進行的。

我試圖谷歌它,但沒有找到答案。我知道我可以爲此實現自定義過濾器,但是它可能已經存在於MVC中了?

謝謝。

+0

我對你的意圖有點失落。你想阻止來自未經身份驗證或錯誤角色用戶的未授權請求嗎? – 2013-03-06 20:25:18

+0

我只想阻止直接的請求動作(當有人在瀏覽器URL欄中輸入「www.mysite.com/controller/action」時)。 – 2013-03-06 20:27:38

+2

HttpPostAttribute足以阻止瀏覽器欄;) – Olexander 2013-03-06 20:39:27

回答

6

創建自定義操作方法選擇以阻斷非Ajax調用

public class AjaxOnlyAttribute : ActionMethodSelectorAttribute 
{ 
    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) 
    { 
     return controllerContext.HttpContext.Request.IsAjaxRequest(); 
    } 
} 

你的屬性將在經典的方式

[AjaxOnly] 
public ActionResult Index() 
{ 

應用或者你可以將它應用到你的控制器

[AjaxOnly] 
public class HomeController : Controller 
{ 

我不確定我會建議你將用戶發送到404,但一如既往,只有開發人員瞭解他們的要求。所以我建議你考慮一下,如果你想以一種「更溫和」的方式來重定向到警告頁面。

+0

嘿今天快速配對你。 – IamStalker 2013-03-06 21:08:08

+0

@IamStalker,感覺今天劃成 – 2013-03-06 21:09:21

+1

好好好好!也許我會更快下一次 – IamStalker 2013-03-06 21:10:31