首页 > 解决方案 > 如何在 ASP.NET CORE 3.1 中重定向过滤器

问题描述

我有一个在 ASP.NET CORE 3.1 (C#) 中扩展 IAsyncActionFilter 的属性类。在 OnActionExecutionAsync 方法中,我想重定向到另一个控制器/方法,而不调用初始方法调用中的任何其他过滤器。

我曾尝试在 OnActionExecutionAsync 中使用它:

context.Result = new RedirectToActionResult("MethodName", "Home", null);
await next();

当我这样做时,我收到以下错误:

如果 IAsyncActionFilter 通过将 ActionExecutingContext 的 Result 属性设置为非空值来提供结果值,则它不能通过调用 ActionExecutionDelegate 来调用下一个过滤器。

我可以删除 await next(),然后调用初始方法上的其他过滤器。

我已经广泛搜索了谷歌,但没有找到。

实现此目标的正确语法是什么?

谢谢!

标签: asp.net-coreasp.net-core-3.1

解决方案


我遇到了同样的问题,由于没有人回答,我只是分享我的解决方案。

如果您设置了 Result,请不要调用 next():

context.Result = new RedirectToActionResult("MethodName", "Home", null);
if (context.Result != null)
    await next();

推荐阅读