通过ASP.NET MVC中的自定义操作筛选器重定向到自定义视图

时间:2012-05-15 22:02:26

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

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

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

我猜我可以在filterContext的{​​{1}}中保存原始操作名称,但是如何实施该方案呢?

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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

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