c# - 如何打破过滤器的 Action 链

标签 c# asp.net-mvc action-filter

我有 2 个 Action 过滤器:

[Auth]
[Check]
public ActionResult Home()
{
//...
}

我需要首先设置 CheckAttr 并中断 AuthAttr。

我不记得该怎么做了。请帮助我。

示例:

请求操作主页 -> 第一个工作身份验证过滤器和逻辑我需要重定向到另一个操作

最佳答案

您可以通过设置Result来短路整个执行。 filterContext 的属性:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    filterContext.Result = new JsonResult
    {
        Data = "hello",
        JsonRequestBehavior = JsonRequestBehavior.AllowGet
    };
}

在此示例中,我返回了 JsonResult,但您可以返回您喜欢的任何 ActionResult:ViewResult、PartialViewResult、RedirectToRouteResult,...

分配 Result 属性后,将不会为此上下文执行更多过滤器。 Action 执行本身也会被短路。

另请记住,如果您的操作过滤器派生自同一类型,则无法保证它们将以何种顺序执行,除非您手动为每个过滤器分配 Order 属性。当然,如果它们属于不同类型,例如 IAuthorizationFilter 或 IActionFilter ,则显然授权过滤器将在任何操作过滤器之前运行。这是设计使然。

另一方面,如果您只是试图阻止其他操作过滤器执行,但操作本身应该执行,恐怕没有办法实现这一点,您将不得不重新考虑这些过滤器的设计。

关于c# - 如何打破过滤器的 Action 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14627445/

相关文章:

c# - 在 asp.net c# 中选择开始和结束日期后,在另一个文本框中自动生成天数

c# - 序列数组

asp.net-mvc - Sitecore + Glass : Render link, 但忽略权限

.net - ASP.NET MVC、ActionFilters、静态类和传递数据

asp.net-mvc-3 - Autofac 未填充操作过滤器属性

c# - 不需要并发时使用静态方法中的异步等待模式

c# - 如何识别类型为 "field reference"的 Lambda MemberExpression

asp.net-mvc - 如何在 Visual Studio 代码编辑器中运行 asp.net mvc 4.5?

asp.net-mvc - ASP.NET MVC 网站中的 ERR_EMPTY_RESPONSE

asp.net-web-api - 自定义操作过滤器(带有依赖项)在 ASP.NET Core 3.1 Web API 中不起作用