2017-05-02 125 views
2

我學習ASP.Net MVC 5,我走到哪裏,我需要限制在某些情況下,訪問控制行動的情況下。假設我在我的控制器中有5個動作,並且我想在特定場景中限制其中的兩個。如何實現這一點,我知道我們有像[Authorize]這樣的內置屬性。我可以爲控制器操作創建用戶定義的限制嗎?如何限制控制器動作的訪問在ASP.net MVC 5

喜歡的東西:

[SomeRule] 
public ActionResult Index() 
{ 
    return View(); 
} 

如果我可以創建一個名爲「SomeRule」功能或類,然後添加一些規則,我there.Can添加函數/方法/類,我可以添加一些邏輯和如果條件不匹配,則限制訪問並重定向到genreal頁面。我是初學者,請指導我。

+0

檢查有關asp.net的MVC過濾器。 – Christos

+0

@Christos:你能看到我的編輯,請 – Unbreakable

+0

不能你剛剛添加的路由選擇忽略這個控制器的任何請求或重定向到任何其他 –

回答

5

你想要做的是創建一個自定義操作過濾器,這將允許您在操作中定義自定義邏輯來確定給定用戶可以/無法訪問的裝飾作用:

public class SomeRuleAttribute : System.Web.Mvc.ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     // Define some condition to check here 
     if (condition) 
     { 
      // Redirect the user accordingly 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Account" }, { "action", "LogOn" } }); 
     } 
    } 
} 

您也可以對它們擴展這些進一步和設置屬性以及是否需要應用一些價值對證其中屬性的定義:

public class SomeRule: ActionFilterAttribute 
{ 
    // Any public properties here can be set within the declaration of the filter 
    public string YourProperty { get; set; } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     // Define some condition to check here 
     if (condition && YourProperty == "some value") 
     { 
      // Redirect the user accordingly 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Account" }, { "action", "LogOn" } }); 
     } 
    } 
} 

這將類似於使用時注意以下事項

[SomeRule(YourProperty = "some value")] 
public ActionResult YourControllerAction() 
{ 
    // Code omitted for brevity 
} 
+0

如果我採用第一種方法,我的操作方法應該如何? – Unbreakable

+1

我是初學者,請原諒我的無知。 – Unbreakable

+0

好的,我應用了第一種方法,並用'[SomeRuleAttribute]'裝飾了一個動作方法。但即使該控制器動作仍然被調用,這個「SomeRuleAttribute」也會被擊中。 – Unbreakable