我在学Blazor我已经创建了一个Blazor WASM应用程序与“ASP.NET核心托管”选项。所以我在解决方案中有三个项目:客户端、服务器和共享。
下面的代码在Client项目中,当端点正确时(显然)可以完美工作。但是在某个时候我犯了一个错误,把请求URI搞砸了,然后我注意到API返回了一个HTML页面,代码为200 OK(正如你在代码下面的Postman截图中看到的那样)。
我希望我的一个try-catch得到这个,但是调试器跳转到最后一行(返回null),没有抛出异常。
我的第一个问题是为什么?
我的第二个问题是,我如何才能抓住这个机会?
我知道修复端点可以修复所有问题,但如果有一个catch在我输入URI时提醒我,那就更好了。
谢谢
private readonly HttpClient _httpClient;
public async Task<List<Collaborator>> GetCollaborators()
{
string requestUri = "api/non-existent-endpoint";
try
{
var response = await _httpClient.GetFromJsonAsync<CollaboratorsResponse>(requestUri);
if (response == null)
{
// It never enters here. Jumps to the last line of code.
}
return response.Collaborators;
}
catch (HttpRequestException)
{
Console.WriteLine("An error occurred.");
}
catch (NotSupportedException)
{
Console.WriteLine("The content type is not supported.");
}
catch (JsonException)
{
Console.WriteLine("Invalid JSON.");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return null;
}
1条答案
按热度按时间jhiyze9q1#
使用GetFromJsonAsync从来都不是一个好主意。你不是第一个问这种奇怪行为的人。尝试使用GetAsync。至少你会知道,发生了什么事。