首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET IAuthorizationFilter OnAuthorization

ASP.NET IAuthorizationFilter OnAuthorization
EN

Stack Overflow用户
提问于 2011-04-14 20:43:17
回答 1查看 25.8K关注 0票数 14

您好,我正在尝试实现一个自定义授权过滤器

代码语言:javascript
复制
 //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);
    }
}

正如您在OnAuthorization上看到的,我得到的结果是真或假。我需要设置什么才能返回我原来的位置?

编辑:

它似乎仍然让我直接跳转到登录页面

我确实注入了IAuthetication

代码语言:javascript
复制
 this.BindFilter<CustomAdminAuthorizationFilter>(FilterScope.Controller, 0);
   Bind<IAuthentication>().To<CustomAuthenticationService>();

然后,我在控制器中这样装饰我的操作。

代码语言:javascript
复制
[Authorize]
    public ActionResult Index()
    {
        ViewBag.Title = "Welcome";
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        return View();
    }

在我的web.config中,我使用

代码语言:javascript
复制
<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

这应该被改变吗?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-14 20:52:37

将其更改为Attribute,而不是简单的IAuthorizationFilter

代码语言:javascript
复制
[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();
    }
}

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

代码语言:javascript
复制
[SageAdminAuthorize]
public ActionResult Index()
{
    ViewBag.Title = "Welcome";
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    return View();
}
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5663405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档