Blazor 6.0 await HttpClient.GetFromJsonAsync<List CS8601 可能的空引用分配



大家好,我在这里错过了一些相当基本的东西,我真的很感激你的指导。

我对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");  
}
}

当我尝试运行我的razor页面时,我得到一个错误CS8601可能的null引用赋值:(

我不确定我完全理解,我可以使用一些指导,为我指出正确的方向,它必须是一些相当基本的东西,我错过了

有趣的是,这一切都发生了,因为我试图将现有的非异步方法转换为异步方法

使用

//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数据列表

请帮助一个苦苦挣扎的老家伙,给我一个方向,让我明白我错在哪里:)

谢谢大家

GetFromJsonAsync扩展方法返回可空类型。在您的示例中,它是List<InvalidAddressMapping>?(注意末尾额外的?)。例如,如果它不能正确地反序列化,它可能返回null。代码告诉您需要检查null响应以确保安全。

所以安全的版本是这样做:

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消息是一个警告,而不是一个错误。所以从技术上讲,你可以忽略它,尽管我强烈建议不要这样做。

相关内容

  • 没有找到相关文章

最新更新