通过自定义 Action Filter,在 ASP.NET MVC 中重定向到自定义视图

3
我需要实现以下自定义操作过滤器:
当应用于一个名为CountRows的操作时,该操作过滤器应在其OnActionExecuting处理程序中“记住”被调用的操作,并将客户端浏览器重定向到例如Login操作。但是,登录操作应以某种方式知道原始调用的操作,以便在完成登录后立即重定向回CountRows
我猜可以将原始操作名称保存在filterContextTempData中,但是如何通常实现这个场景呢?
2个回答

4
您可以使用以下代码轻松实现此操作:
[AttributeUsage(AttributeTargets.All)]
public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //write your logic 

        RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
        redirectTargetDictionary.Add("area", "");
        redirectTargetDictionary.Add("action", "Error");
        redirectTargetDictionary.Add("controller", "Home");
        filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);   
    }
}

MyActionFilter会重定向到链接"~/Home/Error"。

此示例是从以下链接复制并稍作修改以便回答: http://www.c-sharpcorner.com/UploadFile/ff2f08/use-of-mvc-custom-action-filter/


0

你不应该需要临时数据。理想情况下,你的 SignIn GET 动作应该带有一个字符串 returnUrl 参数。然后你可以使用过滤器,并将 filterContext.HttpContext.Request.RawUrl 传递给登录页面。将重定向 URL 写入登录表单中的隐藏字段。然后当他们提交 POST 请求时,进行认证,返回 Redirect(model.ReturnUrl)。

MVC 默认具有此行为,如果你在受保护的动作上添加了 [Authorize] 属性。从技术上讲,它传递的是 Request.Url.Path 而不是 RawUrl,但概念和结果是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接