【问题标题】:Respond with 404 when using Asp.Net Web API AuthorizeAttribute使用 Asp.Net Web API AuthorizeAttribute 时响应 404
【发布时间】:2015-02-12 12:36:54
【问题描述】:

当匿名用户尝试访问仅对已识别用户有意义的资源 (/preferences) 时,我想返回 HTTP 状态 404 (NotFound)。

在我的控制器/方法上使用 as [Authorize] 属性会自动为匿名用户返回 401(未授权),但在方法内处理授权听起来不太好。有什么想法吗?

编辑:我正在使用 Asp.Net Web API 2 和 Authorize 属性来保护资源。

徘徊的人的相关资源为什么我会返回 404:

【问题讨论】:

    标签: c# asp.net authorization asp.net-web-api


    【解决方案1】:

    让您的 web api 方法返回一个 HttpResponseMessage,并将其配置为返回 404。我相信您可以轻松地将其转换为 c#:

    return Me.Request.CreateResponse(HttpStatusCode.NotFound, "Your message here.")
    

    【讨论】:

    • 感谢您的回答,但是...也许我没有说清楚,但这正是我想要避免的:测试用户是否被授权,然后返回自定义响应。理想情况下,我会“配置” Authorized 在未授权时返回自定义代码。 (这有意义吗?)
    • 是的,我明白了。本文演示了一个自定义授权过滤器。它将响应设置为 401,但您可以轻松地将其设置为任何您想要的:asp.net/web-api/overview/security/authentication-filters
    【解决方案2】:

    我认为这里的问题是,当端点需要授权用户并且拨打电话的用户是匿名的时,401 是“技术上”返回的正确代码。毕竟,匿名用户没有被授权。他们怎么可能?您不能授权匿名用户。

    所以标准代码提供的行为是正确的,你只是想做一些不同的事情。从长远来看,为您的应用程序重新定义 HTTP 状态代码可能是一个坏主意。例如,您的应用程序的客户端如何区分身份验证问题和资源识别问题?两者都会返回 not found。

    如果我听起来像是在责备我,我很抱歉,这不是我的本意。 :-)

    【讨论】:

    • 是的,但是如果您希望隐藏这样的路由甚至存在,则可以按照 RFC 7231 的规定返回 404。
    猜你喜欢
    • 2012-03-20
    • 2019-08-06
    • 2022-01-20
    • 2012-03-17
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2015-04-26
    相关资源
    最近更新 更多