对于初学者来说,BasicAuth 似乎在服务端进行了正确配置(该服务是一个 REST 服务,继承自RestServiceBase
,如果这在这里很重要的话),至少在使用浏览器时它工作得很好。
尝试在 MonoTouch 下将客户端用于服务时,我遇到了两个问题(我正在使用IServiceClient
接口进行JsonServiceClient
备份):
当我输入错误的凭据时,我会收到异常提示“用户名或密码无效”,这一切都很好。但是当我第二次输入任何东西时,无论是正确的还是错误的凭据,并尝试发送一个请求,我都会收到包含以下内容的
Internal Server Error
异常ReponseDto
:Error Code: Cookie Exception, Message: The 'Name' = '$Version' part of the cookie is invalid
我正在使用该
SetCredentials
方法,将AlwaysSendBasicAuthHeader
其设置为true
(但这并不重要,当它被设置为false
同样的事情时)。知道为什么会发生这种情况以及如何解决吗?现在让我们假设我第一次提供了正确的凭据(当一切正常时),初始身份验证正常。现在,当我尝试从标有
[Authenticate]
属性的服务中获取 DTO 时,我得到:ServiceStack.ServiceClient.Web.WebServiceException: Internal Server Error
除了内部例外:
System.IndexOutOfRangeException: Array index is out of range.
at ServiceStack.Text.Json.JsonTypeSerializer.EatValue (System.String value, System.Int32& i) [0x00000] in <filename unknown>:0
at ServiceStack.Text.Json.JsonTypeSerializer.EatTypeValue (System.String value, System.Int32& i) [0x00000] in <filename unknown>:0
at ServiceStack.Text.Common.DeserializeListWithElements`2[DTO.Report,ServiceStack.Text.Json.JsonTypeSerializer].ParseGenericList (System.String value, System.Type createListType, ServiceStack.Text.Common.ParseStringDelegate parseFn) [0x00000] in <filename unknown>:0
at ServiceStack.Text.Common.DeserializeList`2+<GetParseFn>c__AnonStoreyB[System.Collections.Generic.IList`1[DTO.Report],ServiceStack.Text.Json.JsonTypeSerializer].<>m__37 (System.String value) [0x00000] in <filename unknown>:0
at ServiceStack.Text.JsonSerializer.DeserializeFromString (System.String value, System.Type type) [0x00000] in <filename unknown>:0
at ServiceStack.Text.JsonSerializer.DeserializeFromStream (System.Type type, System.IO.Stream stream) [0x00000] in <filename unknown>:0
at ServiceStack.ServiceClient.Web.AsyncServiceClient.HandleResponseError[IList`1] (System.Exception exception, ServiceStack.ServiceClient.Web.RequestState`1 requestState) [0x00000] in <filename unknown>:0 }
据我所知,这意味着 JSON 序列化程序因未知原因而放弃。POST
有趣的是,如果我禁用身份验证,同一段代码可以正常工作 -通过搜索请求异步获取 DTO 列表:
client.SendAsync<IList<DTO.Report>>(searchRequest, OnSuccess, OnError)
第一点的问题仍然存在:为什么?如何解决?:)