【问题标题】:How to redirect Filters in ASP.NET CORE 3.1如何在 ASP.NET CORE 3.1 中重定向过滤器
【发布时间】: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


【解决方案1】:

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

如果你设置了 Result,就不要调用 next():

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多