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">