ASP.NET IAuthorizationFilter OnAuthorization

Mar*_*ady 14 c# authorization asp.net-mvc-3

嗨,我正在尝试实现自定义授权过滤器

 //The Authourization attribute on a controller
public class CustomAdminAuthorizationFilter : IAuthorizationFilter
{
    private readonly IAuthentication _authentication;

    public SageAdminAuthorizationFilter(IAuthentication authentication)
    {
        _authentication = authentication;
    }

    public void OnAuthorization(AuthorizationContext filterContext)
    {
       bool result = _authentication.Authorize(filterContext.HttpContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您在OnAuthorization上看到的那样,我得到的结果是假的.我需要设置什么才能返回我来自哪里?

编辑:

它似乎仍然让我直接进入登录页面

我注射了IAuthetication

 this.BindFilter<CustomAdminAuthorizationFilter>(FilterScope.Controller, 0);
   Bind<IAuthentication>().To<CustomAuthenticationService>();
Run Code Online (Sandbox Code Playgroud)

然后我在控制器中装饰我的动作.

[Authorize]
    public ActionResult Index()
    {
        ViewBag.Title = "Welcome";
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        return View();
    }
Run Code Online (Sandbox Code Playgroud)

在我的web.config我使用

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

这应该改变吗?

任何帮助将不胜感激.

hun*_*ter 17

改变一个Attribute,而不是简单的aIAuthorizationFilter

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class SageAdminAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
{
    readonly IAuthentication _authentication;

    public SageAdminAuthorizeAttribute(IAuthentication authentication)
    {
        _authentication = authentication;
    }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!_authentication.Authorize(filterContext.HttpContext))
            filterContext.Result = new HttpUnauthorizedResult();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在而不是[Authorize]使用你的新[SageAdminAuthorize]属性

[SageAdminAuthorize]
public ActionResult Index()
{
    ViewBag.Title = "Welcome";
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    return View();
}
Run Code Online (Sandbox Code Playgroud)

  • 基本接口`IAuthorizationFilter`是多余的,因为`AuthorizeAttribute`已经实现了它. (6认同)