【问题标题】:mvc logout after back button it redirect to main page后退按钮后mvc注销它重定向到主页
【发布时间】:2020-04-16 01:13:01
【问题描述】:

问题是在按下注销返回按钮后它没有重定向到登录页面。 我读了很多东西,也尝试了很多解决方案。

目前的情况如下。

Global.asax 文件中

我在下面添加了代码

protected void Application_BeginRequest()
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    Response.Cache.SetNoStore();
}

在_Layout.cshtml中

我打电话

function logout()
{
    window.location.href = '/account/logout';
}

在 accountController.cs 中

public ActionResult logout()
{
    FormsAuthentication.SignOut();
    System.Web.HttpContext.Current.Session.Abandon(); // it will clear the session at the end of request
    System.Web.HttpContext.Current.Session.Clear();
    System.Web.HttpContext.Current.Session.RemoveAll();

    return RedirectToAction("login", "account");
}

当我按下返回按钮时 它调用commonController

[SessionAuthorize]
[HttpPost]
public JsonResult getMenu()
{
    masterReturn objmasterReturn = new masterReturn();

    var client = new RestClient(string.Format("{0}/userMenu/getMenu", applicationTitle));
    var request = new RestRequest(Method.POST);
    request.AddHeader("authorization", "bearer " + Session["accessToken"].ToString() + "");
    IRestResponse response = client.Execute(request);
    if (response.StatusCode.ToString().ToLower() == "ok")
    {
        objmasterReturn.success = "true";
        //var details = JObject.Parse(response.Content);
        //dynamic item = JsonConvert.DeserializeObject<masterReturn>(response.Content);
        //objmasterReturn.objectVal = item.objectVal;
        objmasterReturn.objectVal = response.Content;
    }
    else
    {
        objmasterReturn.success = "false";
        objmasterReturn.error = "error in api call !!!";
    }

    return Json(objmasterReturn);
}

现在在 FilterConfig.cs 文件中

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }
    public class SessionAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return httpContext.Session["accessToken"] != null;
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            filterContext.Result = new RedirectResult("~/account/logout");
        }
    }
}

下面一行的问题

filterContext.Result = new RedirectResult("~/account/logout");

我试过了

filterContext.Result = new RedirectResult("/account/login");

但它不会重定向到登录页面。

还有其他可行的选择吗?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    而不是使用

     filterContext.Result = new RedirectResult("~/account/logout");
    

    这样使用,希望能解决你的问题...

     filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "You Controller Name" }, { "action", "ActionMethod Name" } });
    

    【讨论】:

    • 你在使用自定义的actionfilter吗?
    • 我使用了 auth 2.0 进程
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2018-12-14
    • 2014-02-10
    • 2021-05-16
    • 2015-08-09
    • 2018-08-03
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多