我在我的项目中使用RestSharp,但是当我尝试连接到一个端点时,我得到了一个错误,但是没有捕获到它。反序列化在对象上继续进行,只是返回null而不是抛出错误。
如果我没有使用反序列化,我可能会看到http状态码,但这都是隐藏的。
例如,我有这样的代码
var request = new RestRequest("address/update").AddJsonBody(updatedAddress);
var response = await client.PostAsync<AddressUpdateResponse>(request);
我在“response”中看到的都是null。我无法获得任何其他信息。
我在他们的错误处理部分读到了这个。
警告
请注意,仅当序列化程序在反序列化响应时引发异常时,反序列化失败才会发生。许多序列化程序默认情况下不引发异常,而只是返回null结果。RestSharp无法找出返回null的原因,因此在这种情况下不会失败。请查看序列化程序文档,以了解是否可以将其配置为在反序列化错误时引发异常。
我正在使用System.Text.Json,但不确定如何执行此操作。
1条答案
按热度按时间62lalag41#
调用
PostAsync<T>
时,RestSharp将尝试使用您提供的T
模型类型反序列化响应。但是,错误响应可能无法反序列化为T
,因此您将返回null
。您可以使用
ExecutePostAsync<T>
,它将返回RestResponse<T>
的示例。它将包含T
的Data
属性和string
的Content
属性。当您获得正确的结果时,Data
属性将包含反序列化的结果。如果调用失败并且服务器返回错误,你可以检查Content
属性来获得错误的详细信息。如果错误内容是JSON,你可以使用任何JSON反序列化器来反序列化它,包括System.Text.Json
。