c# - .Net MVC 4 使用 Windows 身份验证 - 重定向未经授权的用户

标签 c# asp.net-mvc asp.net-mvc-4

我有一个使用 Visual Studio 2012 创建的 MVC 4 Intranet 应用程序。我使用 WindowsAuthentication 并按预期对用户进行身份验证。在某些操作中,我使用 Authorize 属性将用户限制为某些角色。当用户单击调用用户无权访问的 Controller 操作的链接时,它会弹出“需要身份验证”对话框。当我使用未经授权的帐户登录时,它会不断弹出对话框。相反,我想要这样:

  1. 当用户无权访问该页面时,像当前一样弹出对话框。
  2. 当用户输入有效但未被授权访问页面的登录名时,重定向到另一个页面,表示访问被禁止。

我该怎么做呢?作为相关信息,我使用讨论的方法自定义了角色提供程序 here

最佳答案

为此,您需要一个自定义授权来自行处理未经授权的情况。

你需要这样的方法:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

关于c# - .Net MVC 4 使用 Windows 身份验证 - 重定向未经授权的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812304/

相关文章:

asp.net-mvc - 在MVC中使用带有错误消息的资源

c# - 每n秒更新一次对象状态

c# - 是否可以从第一个元素以外的元素开始迭代使用 foreach?

c# - 从静态函数写入标签

.net - 使用EF以正确的顺序删除对象

javascript - 不更新 javascript 文件

asp.net - @Html.CheckBoxFor 不会更改变量的值

c# - 什么时候应该使用 `out` 参数而不是返回复杂类型?

asp.net-mvc - 在 ASP.NET MVC 5 应用程序中启用 SSL 会导致 OpenIdConnectProtocolValidator 问题

c# - MVC4 webapi 中的反序列化/模型绑定(bind)不适用于数组