【问题标题】:Is there a way to make AuthorizeAttribute respond with status code 403 Forbidden rather than a redirect?有没有办法让 AuthorizeAttribute 响应状态码 403 Forbidden 而不是重定向?
【发布时间】:2011-06-12 01:22:18
【问题描述】:

如果用户未登录并且他们请求标记为 [Authorize] 的操作,则响应是重定向到 Account/LogOn 操作(找到状态代码 302)。

有没有办法让响应变成状态码 403 Forbidden?

【问题讨论】:

  • 这是一个 REST 接口吗?
  • @Chris:不,但出于好奇,你为什么要问?我正在编写一个 HttpPost 操作,我只是想在用户未登录时禁止该请求,而不是重定向到 LogOn 操作。
  • 仅供参考 - [授权] 确实发回 403 Forbidden。 FormsAuthenticationModule 捕获 403 响应并将其转换为重定向到登录页面。如果您不使用表单身份验证,您可能需要更改 Web.config 的 部分以反映这一点,以便 FormsAuthenticationModule 不会运行此逻辑。

标签: c# asp.net-mvc-2 http-status-code-403 authorize-attribute


【解决方案1】:

创建一个继承自AuthorizeAttribute 的操作过滤器。然后重写这个方法:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{ 
   Response.StatusCode = 403;
   Response.Status = "Forbidden";
   Response.StatusDescription = "Forbidden";
   Response.End();
   Response.Close();

}

【讨论】:

    【解决方案2】:

    如果用户未登录,则更合适的状态代码是 401:未授权。这是 AuthorizeAttribute 默认返回的内容。

    FormsAuthenticationModule 将捕获此返回代码并将其转换为重定向。如果您可以禁用(甚至不加载它),那么这将返回给调用者。

    【讨论】:

    • 这不是答案!
    猜你喜欢
    • 2022-10-17
    • 2020-05-29
    • 1970-01-01
    • 2023-03-22
    • 2018-04-11
    • 2015-11-28
    • 2018-11-05
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多