我的MVC网页目前使用Session变量进行身份验证。我想尝试制作它,以便我可以使用自定义AuthorizeAttribute,这样我就能用[CustomAuth]装饰控制器。
目前RedirectToRouteResult正带我去#34;此页面无法显示"页。代码正在命中第一个RedirectToRouteResult。
如果我使用RedirectResult
,它也会这样做如何将其指向我的登录页面?
这是我的customAuth
public class CustomAuth : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.RequestContext.HttpContext.Session["isAuth"] != null)
{
if (!(bool)filterContext.RequestContext.HttpContext.Session["isAuth"])
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Base", action = "Login" }));
}
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Base", action = "Login" }));
}
}
}
编辑---
我想在控制器和操作上使用[customAuth],而不必将其放在每个控制器的每个操作中
if (Session["isAuth"] != null)
{
if (!(bool)Session["isAuth"])
{
Session.Clear();
return RedirectToAction("Login", "Base");
}
}
else return RedirectToAction("Login", "Base");
有没有办法使用匿名身份验证?
答案 0 :(得分:0)
以下是我使用从HandleErrorAttribute派生的属性的方法。
只需将filterContent.Result分配给新的ViewResult即可设置目标。如果您需要,请不要忘记其他属性。
public class HandleUnauthorizedAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
if (filterContext.Exception.GetType() != typeof (SecurityException)) return;
var controllerName = (string) filterContext.RouteData.Values["controller"];
var actionName = (string) filterContext.RouteData.Values["action"];
var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
filterContext.Result = new ViewResult
{
ViewName = "Unauthorized",
ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
TempData = filterContext.Controller.TempData
};
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 403;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
}
我只是在FilterConfig.cs中注册它
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleUnauthorizedAttribute());
}
}