OnAuthenticationRequired

OnAuthenticationRequired

这是 StackOverflow 上的第一篇文章,所以如果我做错了什么,请耐心等待。

我正在使用 ServiceStack 创建 RESTful web 服务。
在开发示例 Windows 客户端时,我发现了 JsonServiceClient.OnAuthenticationRequired 属性,但无法使其正常工作。
我没有找到关于它的文档 - 我假设这是一种在服务器需要身份验证时提供用户凭据的委托(delegate)方法 - 但我无法让它工作。

这里有一些我正在尝试使用的示例代码(它是 VB.Net,但它对于 C# 爱好者来说也应该是非常易读的)。

Private _clientAuthenticationRequested As New Action(Of WebRequest)(AddressOf InteractiveAuthentication)

Private Sub Login
....
    _client = New JsonServiceClient(WEBSERVER_ADDRESS)
    _client.OnAuthenticationRequired = _clientAuthenticationRequested
....
End Sub
Private Sub InteractiveAuthentication(SourceRequest As WebRequest)
    SourceRequest.Credentials= ... set some valid credentials
End Sub

'InteractiveAuthentication' 永远不会被触发,即使客户端开始一个需要身份验证的请求。

有人对属性的含义和用法有任何想法吗?

非常感谢你
阿尔贝托

最佳答案

出于好奇,我查看了来源。当我读到它时,如果 WebRequestUtils.ShouldAuthenticate(ex, this.UserName, this.Password) 返回 true,则在异常处理过程中调用 OnAuthenticationRequired 函数。该函数内容如下:

internal static bool ShouldAuthenticate(Exception ex, string userName, string password)
{
    var webEx = ex as WebException;
    return (webEx != null
            && webEx.Response != null
            && ((HttpWebResponse) webEx.Response).StatusCode == HttpStatusCode.Unauthorized
            && !String.IsNullOrEmpty(userName)
            && !String.IsNullOrEmpty(password));
}

需要身份验证时,您的主机是否返回 Unauthorized 状态代码?用户名和密码怎么样。他们人口稠密吗?

相关代码在这里:src/ServiceStack.Common/ServiceClient.Web/ServiceClientBase.cs 里面的 protected virtual bool HandleResponseException 方法。

关于ServiceStack JsonServiceClient OnAuthenticationRequired,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18761937/

10-12 16:02