在WebAPI方法中返回HTTP 403状态码

10

我该如何在WebAPI方法中返回HTTP 403? 我已尝试使用HttpStatusCode.Forbidden抛出HttpResponseException,但似乎无效。

return request.CreateErrorResponse(HttpStatusCode.Forbidden, pEx);

两者都不起作用。它们总是返回一个 HTTP 200。我错过了什么?一定是一些简单的东西,但我没有看到。


你尝试过这里的解决方案吗?https://dev59.com/BGgv5IYBdhLWcg3wXPot#10658604 - Richard
https://dev59.com/HXPYa4cB1Zd3GeqPg0MU - SimSimY
2
能否分享更多的代码...我们无法重现您的问题。 - Kiran
1个回答

3

您可能存在路由配置问题。以下是一个可用的示例,请将其放在您的控制器中并查看是否有效。如果无效,请使用诊断工具(例如Cobisi Routing Assistant)检查您的路由配置。

public HttpResponseMessage GetSomeString(int id)
{
    // This method is not allowed!
    return this.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "This method is not allowed!");
}

1
Teoman,那确实有效。奇怪的是,它似乎与DotNetOpenAuth有某种交互作用。我的Web API是一个由DotNetOpenAuth保护的端点。如果我在不经过DotNetOpenAuth验证的情况下调用我的方法,我会得到403错误。然而,如果我通过DotNetOpenAuth验证来调用它,并且验证失败(这是我想要返回403错误的情况),你建议的同一行代码运行,但无论如何我都会得到200的响应。所以我想我必须重新发布一个带有dotnetopenauth标签的帖子。 - jeff.eynon
4
从HttpResponseMessage到String发生非法转换。 - user3953989
如何修复无效的字符串转换? - GreyCloud
你可以随时抛出一个HttpResponseException(HttpStatusCode.Forbidden)。 - huer12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接