这是 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/