5

在我的 Mvc Api 控制器中,如果用户无法通过身份验证,我会抛出 HttpException 401。但是,RestSharp 客户端似乎将其转换为 Http 500 状态代码。

我希望能够从我的 Mvc 控制器中抛出 HttpExceptions,并让 RestSharp 客户端在其 StatusCode 属性中保留原始错误。

另外,我注意到如果服务器没有启动,当 RestSharp 客户端发出请求时,响应的状态码为 0,响应码为错误。RestSharp 不应该返回 404 http 错误代码吗?

我真正需要的是一些关于 RestSharp 如何与 HttpCodes 一起工作的文档。

用我的 api 控制器中的代码更新:

throw new HttpException((int)HttpStatusCode.Unauthorized, AuthenticationError);
4

4 回答 4

12

你确认你真的向客户返回 401 了吗?ASP.NET MVC 有时会遇到一些奇怪的错误处理。

尝试返回 a HttpUnauthorizedResultMSDN 文档

于 2012-01-19T12:23:08.893 回答
4

我已经能够自己调查这个问题。在 Web 应用程序上设置了表单身份验证,这意味着当从控制器返回 HttpUnauthorizedResult 时,MVC 启动并重定向到登录页面。这具有客户端假设没有发生错误的效果。

我通过使用aspnet.suppressformsredirect nuget 包解决了这个问题,并将抑制标志添加到身份验证响应中。

于 2012-02-06T14:45:45.440 回答
4

以下是在 MVC 中返回 401 的两种方法。

return new HttpUnauthorizedResult("Unauthorized");

或者

return new HttpStatusCodeResult(401);
于 2016-10-19T10:32:25.677 回答
2

蹩脚,蹩脚,蹩脚,我们必须下载一个 NuGet 包才能返回 401!我的解决方法是响应 403 Forbidden 并解释:

throw new HttpException((int)HttpStatusCode.Forbidden, 
  "Please log in as user " + UserId + " and try again.");

语义上不正确,但工作量更少,持续维护更少,风险也更小。

于 2015-05-07T16:40:50.383 回答