在我的数据服务(客户端)中,我试图用这个调用控制器API(Id 36fc1b86-9697-49c5-978c-825f465de73b被硬编码以显示问题):
return await JsonSerializer.DeserializeAsync<IEnumerable<Stage>>
(
await _httpClient.GetStreamAsync($"api/stage/36fc1b86-9697-49c5-978c-825f465de73b"),
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }
);
服务器端(API)
[HttpGet("{id}")]
public IActionResult GetAllStage(string id)
{
return Ok(_stageRepository.GetAllStagesById(id));
}
错误:
Microsoft.AspNetCore.Components.WebAssembly.Frendering.WebAssemblyRenderer[100]呈现组件时出现未处理的异常:值不能为null。(参数"source")System.ArgumentNullException:值不能为null。(参数"源")
但如果GUID以字母开头(请参阅下面的/a…),一切都是这样的:
return await JsonSerializer.DeserializeAsync<IEnumerable<Stage>>
(
await _httpClient.GetStreamAsync($"api/stage/a0bdb087-dadc-4382-9a28-75f93917698b"),
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
变通办法。我在开头加了一个字母(这里是X):
return await JsonSerializer.DeserializeAsync<IEnumerable<Stage>>
(await _httpClient.GetStreamAsync($"api/stage/X{id}"), new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
并在API中删除它。。。
[HttpGet("{id}")]
public IActionResult GetAllStage(string id)
{
return Ok(_stageRepository.GetAllStagesById(id.Remove(0, 1)));
}
知道这个bug吗?
线索在中
Unhandled exception rendering component: Value cannot be null. (Parameter 'source')
这意味着IEnumerable是null
,它不应该在那里。由于这是从WebAssemblyRenderer抛出的,您可能会在没有null保护的@foreach() { <tag> </tag> }
中使用结果。
为什么它依赖于Guid的起始字符?这肯定是GetAllStagesById()
内部的一个问题
我们无法调试未包含的代码。