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

本文关键字:自定义 重定向 视图 NET ASP 筛选 MVC 操作 通过 | 更新日期: 2023-09-27 18:34:20

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

动作

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

我猜我可以将原始操作名称保存在filterContextTempData中,但是我通常如何实现该场景?

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

您可以简单地使用代码执行此操作,如下所示:

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

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

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