代码之家  ›  专栏  ›  技术社区  ›  roryf

检测IActionFilter.OnActionExecuted中的重定向

  •  4
  • roryf  · 技术社区  · 16 年前

    我有一个 IActionFilter OnActionExecuted ,但是我不想在控制器结果执行重定向时执行此操作。

    ActionResult RedirectResult RedirectToRouteResult ,但这并不可靠,因为任何类型的结果都可以执行重定向(实际上我有两个自定义的重定向)。

    也许只是检查一下 ViewResult PartialViewResult

    2 回复  |  直到 16 年前
        1
  •  3
  •   Dmytrii Nagirniak    16 年前

    ... 这不像任何类型的 结果可以执行重定向(实际上 我有两个定制的)

    如果执行重定向,则必须将Result设置为RedirectResult或类似值,而不仅仅是Response.redirect。
    如果它是Response.Redirect,那么它显然是错误的。
    示例是AuthorizeAttribute,它将结果更改为HttpUnauthorizedResult。


    另外,如何应用约定: 如果ActionResult类型的名称包含“Redirect”单词,则它是一个重定向 .

    var isRedirect = filterContext.ActionResult.GetType().Name.Contains("Redirect");
    

    如果它看起来像只鸭子,那就游得像只鸭子

    当然,解决方案并不完美,但简单易懂。

        2
  •  0
  •   queen3    16 年前

    我建议检查一下结果类型。您可以用“[IsRedirect]”标记自定义操作,将它们命名为“…Redirect”或从“IRedirectResult”派生来检测。

    1. 改为处理OnResultExecuted并检查结果对HTTP上下文做了什么(URL已更改,等等)-不确定这是否有效
    2. 使用假上下文手动调用Result.Execute(),并检查结果对该假上下文所做的操作。如果调用了任何“重定向”,则可以让伪上下文记住。

    但是仅仅检查结果类型就简单多了。

    推荐文章