Asp.net-Mvc

獲取 ActionName、ControllerName 和 AreaName 並傳入 ActionFilter 屬性

  • April 2, 2012

我使用自定義 AuthorizationFilter 如下:

public class ActionAuthorizeAttribute : AuthorizeAttribute {

protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) {

       if(!httpContext.User.Identity.IsAuthenticated)
           return false;

       if(IsUserExcluded())
           return false;
       else
           return IsRoleAuthorize(httpContext);
   }
}

我在我擁有的每個操作的頂部使用此過濾器,並檢查是否已授權,需要操作名稱、控制器名稱和區域名稱。那麼有什麼方法可以在AuthorizeCore()use這樣的方法中獲取這些名稱System.Web.HttpContextBase?如果答案是否定的,那麼我如何獲取這些名稱並將其傳遞給屬性,顯然我不想手動添加每個名稱,實際上就像ViewContext.RouteData.Values["Controller"]在控制器中一樣:

[ActionAuthorize(actionName=Action, controller=ControllerName, area=AreaName)]
public ActionResult Index() {
   return View();
}

有人對此有任何想法嗎?

您可以從 RouteData 中獲取它們:

protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
{
   var rd = httpContext.Request.RequestContext.RouteData;
   string currentAction = rd.GetRequiredString("action");
   string currentController = rd.GetRequiredString("controller");
   string currentArea = rd.Values["area"] as string;

   ...

}

引用自:https://stackoverflow.com/questions/9976476