如何在ASP中显示自定义错误,如果授权失败.净MVC
本文关键字:如果 授权 失败 MVC 错误 自定义 ASP 显示 | 更新日期: 2023-09-27 18:09:47
试图找出如何避免请求用户名和密码,当一个控制器动作被调用,有一个Authorize
头,只是重定向到一个视图。
在我的网上。config I have
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" cacheRolesInCookie="false">
<providers>
<clear />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
然后,在我的控制器中,我为一个动作加上如下前缀
[Authorize(Roles = "DOMAIN''Group")]
public ActionResult Index()
{
...controller action code here
}
如果我将它设置为我所属的DOMAIN'Group,那么应用程序就像预期的那样工作。如果我将其更改为一个伪组进行测试,我将看到一个用户名和密码对话框。显然,身份验证永远不会发生。如果我在对话框中单击cancel,我将被重定向到401错误页面。
我想做的是,既然在网络的定义。配置文件只有windows用户可以连接,如果该windows用户不在所选组中,只需重定向到特定的视图,而不是提示用户名和密码。
您可以创建自定义属性并覆盖HandleUnauthorizedRequest。然后重定向到自定义页面,如果授权失败,
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Common", action = "AccessDenied" }));
}
}
}
[CustomAuthorize(Roles = "DOMAIN''Group")]
public ActionResult Index()
{
...
}