C# 返回HTTP401并说客户端不重复请求

C# 返回HTTP401并说客户端不重复请求,c#,ios,asp.net-mvc-3,http-status-codes,http-status-code-401,C#,Ios,Asp.net Mvc 3,Http Status Codes,Http Status Code 401,我们实现了自定义身份验证。用户名和密码在请求正文中发送。若用户或密码无效,则服务器返回HTTP401。服务器是用C#、MVC3和.NET4.0实现的 我们面临的问题是,如果客户端收到401,那么它会自动重新发送相同的请求2次。实际上,这只是iOS的问题。iOS的家伙们说它发生在低级别上,在应用程序中失去了控制。所以服务器可能应该能够说客户端不再发送请求 这对我们来说是个问题,因为我们使用Active Directory,如果密码无效,我们会尝试三次而不是一次。所以帐户很快就被锁定了,而且出乎意料

我们实现了自定义身份验证。用户名和密码在请求正文中发送。若用户或密码无效,则服务器返回HTTP401。服务器是用C#、MVC3和.NET4.0实现的

我们面临的问题是,如果客户端收到401,那么它会自动重新发送相同的请求2次。实际上,这只是iOS的问题。iOS的家伙们说它发生在低级别上,在应用程序中失去了控制。所以服务器可能应该能够说客户端不再发送请求

这对我们来说是个问题,因为我们使用Active Directory,如果密码无效,我们会尝试三次而不是一次。所以帐户很快就被锁定了,而且出乎意料

我发现这个上面写着

401未经授权

。。。客户端可以使用适当的授权头字段重复请求


如何返回HTTP 401并告诉客户端不再重复请求?

您可以改用403:

从站点:

10.4.4 403禁止

服务器理解该请求,但拒绝满足该请求。 授权没有帮助,请求不应重复

实际上,这有点棘手:403在身份验证成功时似乎更合适,但请求的资源不允许用于特定用户,这不是您的情况。然而,403意味着客户端不应该重复身份验证,这正是您想要的


如果登录页面仅由人来解释,那么您可以考虑返回“200 OK”并简单地再次显示登录页面(可能对用户可见登录失败的指示)。但是我们已经有了一些版本的客户端,可以使用401。在不改变HTTP代码的情况下,它也应该适用于他们。另一方面,401更适合于未经身份验证的情况(请参阅)。