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 關注
- 563 瀏覽
添加回答
舉報