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