C# 使用ng include时在部分视图中打开登录页面

C# 使用ng include时在部分视图中打开登录页面,c#,angularjs,asp.net-mvc,session,authentication,C#,Angularjs,Asp.net Mvc,Session,Authentication,我将以下代码用于会话和身份验证超时: public class AuthCheckService : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if (HttpContext.Current.Session.Count == 0 || HttpContext.Current.Session[

我将以下代码用于会话和身份验证超时:

public class AuthCheckService : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (HttpContext.Current.Session.Count == 0 || HttpContext.Current.Session["NovellID"] == null || HttpContext.Current.Session["UserRole"] == null)
        {

            if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
            {
                //Ajax request doesn't return to login page, it just returns 403 error.
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.StatusCode = 501;
                throw new ModelStateException("Your Session has expired- Please login again!");
            }
            else
            {
                //base.HandleUnauthorizedRequest(filterContext);
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { action = "Login", controller = "Account" }));
            }

        }
        else if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            // Otherwise the reason we got here was because the user didn't have access rights to the
            // operation, and a 403 should be returned.
            filterContext.Result = new HttpStatusCodeResult(403);
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }

    }

}

public class SessionCheckService : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (HttpContext.Current.Session.Count == 0 || HttpContext.Current.Session["NovellID"] == null || HttpContext.Current.Session["UserRole"] == null)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.StatusCode = 501;
                throw new ModelStateException("Your Session has expired- Please login again!");
            }
            else
            {
               // HttpContext.Current.Response.Redirect(Helper.SiteURL + "Account/Login");
                //filterContext.Result = new RedirectResult(Helper.SiteURL + "Account/Login");
               // return;
                //base.OnActionExecuting(filterContext);
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { action = "Login", controller = "Account" }));
            }
        }
        base.OnActionExecuting(filterContext);

    }
}
但在会话到期时,我将看到以下屏幕

我用的是角的。当我在会话到期时单击打开编辑过期任务时,我会看到上面的屏幕

HTML:

请告诉我哪里出了问题。

示例:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UserAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);

        //    return httpContext.Session != null && httpContext.Session.Count != 0;
        return isAuthorized;

    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new HttpUnauthorizedResult();
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = 401;
                filterContext.HttpContext.Response.End();
            }
            else
            {
                filterContext.Result = new RedirectToRouteResult(LoginRougte());
            }

        }
        else if (!Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))
        {

            filterContext.Result = new HttpUnauthorizedResult();
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = 401;
                filterContext.HttpContext.Response.End();
            }
            else
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                {
                    {"action", "Index"},
                    {"controller", "Login"},
                    {"area", ""}
                });
                filterContext.Result = new RedirectToRouteResult(LoginRougte());
            }
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }


    }

    private RouteValueDictionary LoginRougte()
    {
        return new RouteValueDictionary
                    {
                        {"action", "Index"},
                        {"controller", "Login"},
                        {"area", ""}
                    };
    }
}
希望它对您有用。

示例:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UserAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);

        //    return httpContext.Session != null && httpContext.Session.Count != 0;
        return isAuthorized;

    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new HttpUnauthorizedResult();
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = 401;
                filterContext.HttpContext.Response.End();
            }
            else
            {
                filterContext.Result = new RedirectToRouteResult(LoginRougte());
            }

        }
        else if (!Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))
        {

            filterContext.Result = new HttpUnauthorizedResult();
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = 401;
                filterContext.HttpContext.Response.End();
            }
            else
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                {
                    {"action", "Index"},
                    {"controller", "Login"},
                    {"area", ""}
                });
                filterContext.Result = new RedirectToRouteResult(LoginRougte());
            }
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }


    }

    private RouteValueDictionary LoginRougte()
    {
        return new RouteValueDictionary
                    {
                        {"action", "Index"},
                        {"controller", "Login"},
                        {"area", ""}
                    };
    }
}

希望它对您有用。

我使用拦截器得到了解决方案

Main.js:

Login.cshtml: 在login.cshtml中,我添加了meta标记

<meta name="unauthorized" content="true">

希望这能帮助其他人。

我使用拦截器得到了解决方案

Main.js:

Login.cshtml: 在login.cshtml中,我添加了meta标记

<meta name="unauthorized" content="true">

希望这会对其他人有所帮助。

这里的可能重复是一个优雅的解决方案,我遵循ajax会话超时的可能重复是一个优雅的解决方案,我遵循ajax会话超时没有运气:-。我刚刚修改了问题,请检查。@Sunny抱歉。我举了一个完整的例子,我今天做了测试。请试试这个。运气不好:-。我刚刚修改了问题,请检查。@Sunny抱歉。我举了一个完整的例子,我今天做了测试。请试试这个。
<meta name="unauthorized" content="true">