如何在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用户不在所选组中,只需重定向到特定的视图,而不是提示用户名和密码。

如何在ASP中显示自定义错误,如果授权失败.净MVC

您可以创建自定义属性并覆盖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()
{
   ...
}