3

我已经实现了自己的Authorize属性,并且我注意到它会在我使用[Authorize].

有什么方法可以获得该权限并在应用该Authorize属性的当前控制器中使用它,而无需重写和重新查询控制器中的代码?

4

1 回答 1

3

是的你可以。如果您将 Authorize 属性实现为 ActionFilterAttribute,则可以使用 ViewData 集合来存储如下信息:

    public class RequireRegistrationActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;
        HttpResponseBase response = filterContext.HttpContext.Response;

        if (request != null && 
            response != null)
        {
            bool isAuthenticated = request.IsAuthenticated;
            filterContext.Controller.ViewData["IsAuthenticated"] = isAuthenticated;

            if (!isAuthenticated)
            {
                string url = String.Format(
                   "/?ReturnUrl={0}", 
                   HttpUtility.UrlEncode(request.Url.ToString()));
                response.Redirect(url);
            }
        }
    }
}

在带注释的控制器的 acrion 中,您可以通过以下方式访问该字段:

bool isAuthenticated = (bool)(ViewData["IsAuthenticated"] ?? false);
于 2009-12-22T13:38:12.033 回答