谁能向我解释为什么这个函数有时会返回我null
:
public async Task<T> PostData<T>(string apiFunction, object data) where T : new()
{
try
{
using (HttpResponseMessage response = await Client.PostAsJsonAsync(apiFunction, data))
{
if (response.IsSuccessStatusCode)
{
var jsonData = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(jsonData);
}
else return new T();
}
}
catch (HttpRequestException)
{
return new T();
}
catch (JsonReaderException)
{
return new T();
}
}
在声明为单例的服务中使用。被叫来控制。例如:
[HttpGet]
public async Task<IActionResult> Connect()
{
ResponseServer responseServer = await _request.PostData<ResponseServer>("connection", userEntity);
if (responseServer == null) responseServer = new ResponseServer();
}
您必须对null
.
我想我已经成熟了答案。
首先,让我们证明这不是关于
else return new T()
,也不是关于缺少另一个 catch 块,正如我在评论中所建议的那样,同时我们抛出了我们将模拟不同情况的类。我们拿 linqpad,我们写:
我们开始,我们看——不是空的。
尝试二。此外,让我们尝试抛出一个我们不处理的类型的异常:
一切都是合乎逻辑的——我们得到一个未处理的异常。也不是一个选择。
让我们连接 Json 并尝试看看我们的 Null 会产生什么结果:
不再为 null,因为 Json.Net 会抛出一个 ArgumentException,它会被 catch 捕获。
但是如果我们试图表明 data 是一个空字符串,那么我们将得到 null:
在这里,找到了您的状况。你从 http 客户端得到一个空字符串,结果,Json.Net 给你一个 Null。