我收到错误,无法弄清楚我做错了什么:
"Type definitions should start with a '{', expecting serialized type 'MessageHistoryResponse', got string starting with:
<!DOCTYPE html>
<html>
<head>
<meta name=" ...
客户端代码很简单:
var client = new JsonServiceClient(Url);
try
{
var messageHistoryResponse = client.Send(new MessageHistory {
Take = 20,
Skip = 0
});
}
catch (WebServiceException e)
{
Console.WriteLine(e);
}
我有一个请求过滤器,如下所示:
public override void Execute(IRequest req, IResponse res, object requestDto)
{
var token = req.Headers["authtoken"];
if (token != null)
{
//Authenticated code
}
if (_logger.IsDebugEnabled)
_logger.DebugFormat("[Token {0}] Access Denied", token);
res.ReturnAuthRequired();
}
这是遵循其中一个示例,但它不是接收WebException
,而是抛出序列化异常。我不确定如何处理这个问题?
我的所有服务都使用标准的requestDto / responseDto模式。从文档我期待抛出WebException
,然后我可以处理。但相反,它是SerializationException
并且没有报告Auth失败。
有人有任何想法可以帮助我吗?
答案 0 :(得分:2)
您的过滤器未将内容类型设置为application/json
,因此未经授权的错误将输出为JsonServiceClient
不期望的html。
您可以设置响应类型,然后throw
错误
public override void Execute(IRequest req, IResponse res, object requestDto)
{
...
res.ContentType = "application/json";
throw new HttpError(System.Net.HttpStatusCode.Unauthorized, "401", "Invalid token, access denied");
}
答案 1 :(得分:1)
我在论坛的帮助下找到了答案。我遇到的问题是由于ASP .NET成员资格提供程序和ServiceStack之间的冲突。收到401 Unauthorized响应后,ASP .NET会劫持该请求并接管。
我改变了我的代码而不是返回403 Forbidden,我又回来了。
令人沮丧,但我很高兴我们最终能够深入了解它。
感谢您的帮助。