gpt4 book ai didi

c# - 在授权过滤器之前执行的 ASP.NET Core MVC 操作过滤器

转载 作者:行者123 更新时间:2023-12-02 00:23:00 24 4
gpt4 key购买 nike

在我的站点上,我有一些仅限经过身份验证的用户使用的 Controller 。除此之外,还有一些 Controller 需要身份验证,还需要根据一年中的时间进行限制。

为了处理这个问题,我创建了一个 TimeRangeFilter ActionFilter/ResourceFilter

这是它的样子:

public class TimeRangeFilter : Attribute, IActionFilter, IOrderedFilter
{
public string AllowedMonths { get; set; } // like |3|4|5|
public string RedirectUrl { get; set; }
...... // OnActionExecuting....
}

然后,在我的 Controllerclass 上,我这样实现:

[TimeRangeFilter(AllowedMonths = "|3|4|", RedirectUrl = "/feature/welcome", Order = 1)]
[Authorize]
[IsNotNefarious]
public class HubController : BaseController
{...}

但是,即使在 filter 上使用 IOrderedFilter interfaceAuthorizationFilter 也会先执行,然后是我的 TimeRangeFilter.

对于这个欢迎页面,我不想要求用户登录才能看到它。但我不想根据允许的月份更改访问我的中心页面的 URL。

如何在 AuthorizationFilter 执行之前优先执行我的 ActionFilter/ResourceFilter 并短路?

最佳答案

简短的回答是“你不能让 ActionFilterAuhtorizeFilter 之前执行”。但是你可以把 TimeRangeFilter 变成授权过滤器

public class TimeRangeFilterAttribute : Attribute, IAuthorizationFilter, IOrderedFilter
{
public string AllowedMonths { get; set; } // like |3|4|5|
public string RedirectUrl { get; set; }

public void OnAuthorization(AuthorizationFilterContext context)
{
if (not allowed) {
context.Result = new RedirectResult(RedirectUrl);
}
}
}

指定 Order = 0 使其在其他 Authorize 检查之前运行,或者尝试实现 IOrderedFilter它也将首先执行。

关于c# - 在授权过滤器之前执行的 ASP.NET Core MVC 操作过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com