【问题标题】:Why RedirectResult is not working well in MVC?为什么 RedirectResult 在 MVC 中不能正常工作?
【发布时间】:2018-04-25 00:55:27
【问题描述】:

我正在处理会话代码。当我的会话完成后,转到 global.asax 并重定向到特定的相对 URL。

重定向有效,但是重定向时找不到页面。

我的代码有什么问题?

两者都无法正常工作,使用 HTTP 和我的 IP 以及相对路径。

public class SessionExpireAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContext ctx = HttpContext.Current;
            // check  sessions here
            if (HttpContext.Current.Session["UsuarioActual"] == null)
            {
                 //filterContext.Result = new RedirectResult("[http ip here]");
                filterContext.Result = new RedirectResult("~/Login");
                return;
            }
            base.OnActionExecuting(filterContext);
        }
    }

在我的 global.asax 中有这个

   GlobalFilters.Filters.Add(new SessionExpireAttribute());

【问题讨论】:

  • new RedirectResult("/Account/Login");?
  • @StephenMuecke 这是一个精明的猜测,但需要更多信息
  • 第 1 步是确定 302 重定向标头是否包含正确的字符串。如果是这样,则此问题中的大多数示例都无济于事-我们需要查看与 URL 匹配失败的路由配置。

标签: c# asp.net-mvc session iis-7


【解决方案1】:

试试:

public class SessionExpireAttribute : ActionFilterAttribute
{
    private RouteValueDictionary LoginRougte()
    {
        return new RouteValueDictionary
        {
            {"action", "Login"},
            {"controller", "Account"},
            {"area", ""}
        };
    }

    private readonly List<string> _exceptCtrls = new List<string> { "userauth", "manager", "account" };

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var routeData = filterContext.HttpContext.Request.RequestContext.RouteData;
        var controller = routeData != null ? routeData.Values["controller"] as string : string.Empty;
        var check = !string.IsNullOrEmpty(controller) && !_exceptCtrls.Contains(controller.ToLower());

        if (check && (HttpContext.Current.Session == null || HttpContext.Current.Session.Keys.Count == 0))
        {                
            filterContext.Result = new RedirectToRouteResult(LoginRougte());
        } 
        base.OnActionExecuting(filterContext);
    }
}

此代码来自我的实时项目。这是我的工作。希望它也对你有用。

【讨论】:

  • 运行良好,但仍然无法很好地重定向我,我不知道为什么...我将 SessionExpireAttribute 放入 Model 文件夹...我不知道这是否是问题所在。 .. “找不到页面...尝试删除 cookie”
  • @WhiteKnight r u 更改LoginRougte() 中的RouteValueDictionary 值。我认为您需要将 actioncontroller 名称更改为您的项目。
【解决方案2】:

我解决了这个问题

filterContext.Result = new RedirectToRouteResult(LoginRougte());

由此

HttpContext.Current.Response.Redirect("~/Login/LogOut");

【讨论】:

    猜你喜欢
    • 2016-07-16
    • 2019-01-04
    • 2020-09-03
    • 2016-10-10
    • 2016-10-24
    • 2017-02-27
    • 2017-07-08
    • 2014-11-23
    • 2021-03-07
    相关资源
    最近更新 更多