如何将401认证错误返回给RestSharp客户端?

时间:2012-01-19 12:19:45

标签: asp.net-mvc restsharp http-error

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:11)

您是否确认过您真的将401返回给客户? ASP.NET MVC有时会遇到一些奇怪的错误处理。

尝试返回HttpUnauthorizedResultMSDN doc

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

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

return new HttpUnauthorizedResult("Unauthorized");

return new HttpStatusCodeResult(401);

答案 3 :(得分:0)

Lame,lame,lame,我们必须下载一个NuGet包才能返回401!我的解决方法是回复403 Forbidden并附上解释:

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

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