检查操作是否在ActionFitler中返回View或Redirect

时间:2017-06-13 13:07:21

标签: c# asp.net-core action-filter

如何检查自定义libproc中的操作是返回View()还是Redirect()?我需要检查这一点,因为ActionFilter用额外的东西填充ActionFilter。但如果它是重定向,则不需要它。

实施例

控制器操作

ViewBag

动作过滤器

[MyActionFilter]
public IActionResult Index()
{
    if (ModelState.IsValid())
        return View();
    else
        return Redirect("foo");
}

2 个答案:

答案 0 :(得分:2)

我明白了。

使用ResultFilter代替我,可以访问返回的类型。我还必须从after动作更改为before动作,因为通常不允许在after动作中更改结果。

public class MyActionFilter : IResultFilter
{
    public void OnResultExecuting(ResultExecutingContext context)
    {
        if (context.Result is ViewResult)
            context.Controller.ViewBag.Foo = "Bar";
        else
            // do other stuff
    }

    public void OnResultExecuted(ResultExecutedContext context)
    {
    }
}

答案 1 :(得分:0)

ActionExecutedContext有一个ActionResult。您可以在OnActionExecuted中检查ActionResult是ViewResult还是RedirectResult / RedirectToRouteResult。