提问人:Charlie Fisher 提问时间:7/19/2022 更新时间:7/19/2022 访问量:1214
Blazor 6.0 等待 HttpClient.GetFromJsonAsync<List CS8601 可能的 null 引用签名
Blazor 6.0 await HttpClient.GetFromJsonAsync<List CS8601 Possible null reference asignment
问:
大家好,我在这里错过了一些相当基本的东西,我真的很感激一些指导。
我对 Blazor 和实体框架相当陌生,并且正在构建我的第一个 Blazor 应用之一
我有一个相当基本的数据类
using System.ComponentModel.DataAnnotations;
namespace BIDM2.Data
{
public class InvalidAddressMapping
{
[Key]
public int record_no { get; set; } = 0;
public string sales_org_pos { get; set; } = " ";
public string press_sales_mgr_code { get; set; } = " ";
public string press_sales_mgr_Name { get; set; } = " ";
public string forming_sales_rep_code { get; set; } = " ";
public string forming_sales_rep_Name { get; set; } = " ";
}
}
我在控制器中使用的如下所示
[HttpGet]
public async Task <ActionResult<List<InvalidAddressMapping>>> GetInvalidAdressMappings()
{
return await _db.GetInvalidAddressMappings.FromSqlRaw("EXEC BIDM_GetInvalidAddressMappings;").ToListAsync();
}
我试图像这样在我的剃须刀页面中使用它
@code {
List<InvalidAddressMapping> invalidMappings = new List<InvalidAddressMapping>();
protected override async Task OnInitializedAsync()
{
invalidMappings = await HttpClient.GetFromJsonAsync<List<InvalidAddressMapping>>(NavigationManager.BaseUri + "invalidmapping");
}
}
当我尝试运行我的剃刀页面时,我收到错误 CS8601 可能的空引用签名:(
我不确定我是否完全理解,我可以使用一些指导来为我指明正确的方向,它必须是我所缺少的相当基本的东西
有趣的是,这一切都是因为我试图将现有的非异步方法转换为异步方法
当我使用
//1. get invalid address mappings
public InvalidAddressMapping[] GetInvalidAddressMappings()
{
InvalidAddressMapping[] invMappings;
// exec BIDM_GetInvalidAddressMappings calls the stored procedure
invMappings = _dbcontext.GetInvalidAddressMappings.FromSqlRaw("EXEC BIDM_GetInvalidAddressMappings;").ToArray();
return invMappings;
}
}
它运行良好,我可以看到一个可爱的 JSON 数据列表
请帮助一个苦苦挣扎的老 git 出来,让我朝着一个我可以理解我哪里出错的方向前进:)
谢谢大家
答:
2赞
DavidG
7/19/2022
#1
GetFromJsonAsync
扩展方法返回可为 null 的类型。就你而言,它是(注意最后的额外内容)。例如,如果它无法正确反序列化,它可能会返回 null。代码告诉您需要检查 null 响应是否安全。List<InvalidAddressMapping>?
?
所以安全的版本是做这样的事情:
var result = await HttpClient.GetFromJsonAsync<List<InvalidAddressMapping>>(
NavigationManager.BaseUri + "invalidmapping");
if(result == null)
{
// Do something here to handle this error, for example:
throw new Exception("Can't get data from the server for some reason, help!");
}
invalidMappings = result;
另请注意,您看到的 CS8601 消息是警告,而不是错误。因此,从技术上讲,您可以忽略它,尽管我强烈建议不要这样做。
评论
GetFromJsonAsync
返回一个可以为 null 的类型。例如,如果它无法正确反序列化,它可能会返回 null。代码告诉您需要检查 null 响应是否安全。GetInvalidAdressMappings