3 回答
TA贡献1829条经验 获得超7个赞
您可以HandleUnauthorizedRequest在自定义中使用可覆盖的内容AuthorizeAttribute
像这样:
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
// Returns HTTP 401 by default - see HttpUnauthorizedResult.cs.
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "YourActionName" },
{ "controller", "YourControllerName" },
{ "parameterName", "YourParameterValue" }
});
}
您还可以执行以下操作:
private class RedirectController : Controller
{
public ActionResult RedirectToSomewhere()
{
return RedirectToAction("Action", "Controller");
}
}
现在,您可以通过HandleUnauthorizedRequest以下方式在您的方法中使用它:
filterContext.Result = (new RedirectController()).RedirectToSomewhere();
TA贡献1859条经验 获得超6个赞
“ tvanfosson”的代码给了我“执行子请求时出错”。我这样更改了OnAuthorization:
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (!_isAuthorized)
{
filterContext.Result = new HttpUnauthorizedResult();
}
else if (filterContext.HttpContext.User.IsInRole("Administrator") || filterContext.HttpContext.User.IsInRole("User") || filterContext.HttpContext.User.IsInRole("Manager"))
{
// is authenticated and is in one of the roles
SetCachePolicy(filterContext);
}
else
{
filterContext.Controller.TempData.Add("RedirectReason", "You are not authorized to access this page.");
filterContext.Result = new RedirectResult("~/Error");
}
}
这很好用,我在错误页面上显示了TempData。感谢“ tvanfosson”的代码片段。我正在使用Windows身份验证,_isAuthorized只是HttpContext.User.Identity.IsAuthenticated ...
- 3 回答
- 0 关注
- 526 浏览
添加回答
举报