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

jaf*_*ffa 4 asp.net-mvc http-error restsharp

在我的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);
Run Code Online (Sandbox Code Playgroud)

jga*_*fin 12

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

尝试返回一个HttpUnauthorizedResult代替.MSDN doc


jaf*_*ffa 4

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

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

  • 对@jaffa,这应该是 MVC 4 可接受的答案。但是我们必须下载一些东西才能返回 401,这有多蹩脚?荒谬的。我同样蹩脚的解决方法是发送 403 Forbidden。(参见我的回答)。 (2认同)