当身份验证模式设置为 Windows 时 ASP.NET MVC 中的 AuthorizeAttribute 行为

发布于 2024-10-07 23:31:36 字数 309 浏览 3 评论 0原文

我有一个受 AuthorizeAttribute 保护的控制器。当授权失败时,我只得到一个空白页面。如果我覆盖OnAuthorization(),我可以看到调用base.OnAuthorization()filterContext.Result为空(为什么?)。如果我重写 OnException() 并设置断点,它永远不会命中。有人可以解释一下它应该如何工作吗?如何让它重定向到指定页面?我可以在哪里注入来记录失败的授权尝试(最好不要编写自定义过滤器)?如果重要的话我会使用 MVC 3 RC1。

I have a controller protected with AuthorizeAttribute. When the authorization fails i get just an empty page. If i override OnAuthorization() i can see that after calling base.OnAuthorization() filterContext.Result is null (why?). If i override OnException() and set a breakpoint it never hits. Can please someone explain how it's supposed to work? How can i make it redirect to specified page? Where can i inject into to log failed authorization attempts (better not to write custom filter)? I use MVC 3 RC1 if it's important.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蘑菇王子 2024-10-14 23:31:37

您想要重写 AuthorizeAttribute.HandleUnauthorizedRequest 方法。这是默认实现:

protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
    // Returns HTTP 401 - see comment in HttpUnauthorizedResult.cs.
    filterContext.Result = new HttpUnauthorizedResult();
}

您需要将 Result 设置为 RedirectResult (或其他结果,具体取决于您所需的逻辑)。这也是一个伐木的好地方。

You want to override the AuthorizeAttribute.HandleUnauthorizedRequest method. Here's the default implementation:

protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
    // Returns HTTP 401 - see comment in HttpUnauthorizedResult.cs.
    filterContext.Result = new HttpUnauthorizedResult();
}

You'll instead want to set the Result to be a RedirectResult (or some other result depending on your desired logic). This would also be a good place for logging.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文