我已经实现了CustomRoleProvider,它似乎工作正常。但是,当授权失败时,我会看到一个弹出窗口,上面写着" Windows Security"要求输入用户名和密码。我想要做的是授权失败时,将用户重定向到错误页面。这是代码的片段。
当用户角色不是管理员时,它会显示一个弹出窗口。
[CustomAuthorize]
[Authorize(Roles="Admin")]
public ActionResult ManageTickets(ticketViewModel viewModel)
{
return View;
}
我还尝试自定义HandleUnauthorizedRequest方法,但它不起作用。在调试模式下,这段代码甚至无法执行,我只是弹出窗口。
public class CustomAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
System.Web.Routing.RouteValueDictionary(new { controller = "ErrorController", area = "Core", action = "Error" }));
}
}
}
}
使用Windows身份验证模式 -
<authentication mode="Windows">
提前感谢任何建议。
答案 0 :(得分:1)
可能是windows auth返回状态码401. 401表示:
如果请求已包含授权凭据,则401响应表示已拒绝授权 那些凭据。
确保将此代码添加到web.config并查看发生的情况:
<customErrors defaultRedirect="Your Default Url" mode="RemoteOnly">
<error statusCode="401" redirect="~/core/error/error" />
<error statusCode="403" redirect="~/core/error/error" />
</customErrors>