【问题标题】:AuthorizeAttribute behavior in ASP.NET MVC when authentication mode is set to Windows身份验证模式设置为 Windows 时 ASP.NET MVC 中的 AuthorizeAttribute 行为
【发布时间】:2010-12-18 22:24:05
【问题描述】:
我有一个受AuthorizeAttribute 保护的控制器。当授权失败时,我只得到一个空页面。如果我覆盖OnAuthorization(),我可以看到在调用base.OnAuthorization() 之后filterContext.Result 为空(为什么?)。如果我覆盖OnException() 并设置断点,它永远不会命中。有人可以解释一下它应该如何工作吗?我怎样才能让它重定向到指定的页面?我可以在哪里注入以记录失败的授权尝试(最好不要编写自定义过滤器)?如果它很重要,我会使用 MVC 3 RC1。
【问题讨论】:
标签:
asp.net-mvc
security
authorization
【解决方案1】:
您想要覆盖 AuthorizeAttribute.HandleUnauthorizedRequest 方法。这是默认实现:
protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
// Returns HTTP 401 - see comment in HttpUnauthorizedResult.cs.
filterContext.Result = new HttpUnauthorizedResult();
}
您可能希望将 Result 设置为 RedirectResult(或其他结果,具体取决于您所需的逻辑)。这也是记录日志的好地方。