【问题标题】:Redirect to customized view via custom Action Filter in ASP.NET MVC通过 ASP.NET MVC 中的自定义操作筛选器重定向到自定义视图
【发布时间】:2012-05-15 22:02:26
【问题描述】:

我需要实现以下自定义操作过滤器:

动作过滤器,当应用于动作CountRows时,应该在它的OnActionExecutinghander中“记住”它之前被调用的动作,并将客户端浏览器重定向到Login动作。但是登录动作应该以某种方式知道被调用的原始动作,以便在登录完成后,它会立即重定向回CountRows

我猜我可以将原始动作名称保存在filterContextTempData 中,但我一般如何实现该场景?

【问题讨论】:

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


    【解决方案1】:

    您可以使用以下代码简单地做到这一点:

    [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/

    【讨论】:

      【解决方案2】:

      您不应该需要临时数据。理想情况下,您的 SignIn GET 操作应采用字符串 returnUrl 参数。然后您可以使用过滤器并将 filterContext.HttpContext.Request.RawUrl 传递给登录。让它将重定向 URL 写入登录表单中的隐藏字段。然后当他们 POST 时,进行身份验证,并返回一个 Redirect(model.ReturnUrl)。

      如果您使用 [Authorize] 属性装饰受保护的操作,MVC 默认情况下实际上具有此行为。从技术上讲,它传递的是 Request.Url.Path 而不是 RawUrl,但概念和结果是相同的。

      【讨论】:

        猜你喜欢
        • 2014-06-30
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多