【发布时间】:2021-09-04 03:20:24
【问题描述】:
我有一个在 ASP.NET CORE 3.1 (C#) 中扩展 IAsyncActionFilter 的属性类。在 OnActionExecutionAsync 方法中,我想重定向到另一个控制器/方法,而不调用初始方法调用中的任何其他过滤器。
我尝试在 OnActionExecutionAsync 中使用它:
context.Result = new RedirectToActionResult("MethodName", "Home", null);
await next();
执行此操作时出现以下错误:
如果 IAsyncActionFilter 通过设置 Result 来提供结果值 ActionExecutingContext 的属性为非空值,则它不能 通过调用 ActionExecutionDelegate 调用下一个过滤器。
我可以删除 await next(),但随后调用初始方法上的其他过滤器。
我在 Google 上进行了广泛的搜索,但没有找到。
实现这个目标的正确语法是什么?
谢谢!
【问题讨论】:
-
我可以删除 await next(),但随后调用初始方法上的其他过滤器。我无法重现该问题。你能分享一个演示吗我们可以审查和调试代码吗?你试过 IActionFilter 接口了吗?
-
@XueliChen 如何附上演示?我正在使用 IAsyncActionFilter。普通版不满足 mu 需求。
-
你可以在你的问题中添加可以重现问题的相关代码,或者分享一个演示链接,即你在onedrive或github中发布的url?参考meta.stackexchange.com/questions/61071/adding-links-to-comments
-
@DanGifford:您确定正在调用剩余的过滤器吗?据我了解,一旦设置了
ActionExeutingContext.Result,过滤器管道的其余部分将停止执行。请参阅 Filters in ASP.NET Core 文档中的 Cancellation and Short-Circuiting。
标签: asp.net-core asp.net-core-3.1