3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以HandleUnauthorizedRequest在自定義中使用可覆蓋的內(nèi)容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" }
});
}
您還可以執(zhí)行以下操作:
private class RedirectController : Controller
{
public ActionResult RedirectToSomewhere()
{
return RedirectToAction("Action", "Controller");
}
}
現(xiàn)在,您可以通過(guò)HandleUnauthorizedRequest以下方式在您的方法中使用它:
filterContext.Result = (new RedirectController()).RedirectToSomewhere();

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
“ tvanfosson”的代碼給了我“執(zhí)行子請(qǐng)求時(shí)出錯(cuò)”。我這樣更改了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");
}
}
這很好用,我在錯(cuò)誤頁(yè)面上顯示了TempData。感謝“ tvanfosson”的代碼片段。我正在使用Windows身份驗(yàn)證,_isAuthorized只是HttpContext.User.Identity.IsAuthenticated ...
- 3 回答
- 0 關(guān)注
- 560 瀏覽
添加回答
舉報(bào)