首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bazor6.0等待HttpClient.GetFromJsonAsync<List CS8601可能的空引用

Bazor6.0等待HttpClient.GetFromJsonAsync<List CS8601可能的空引用
EN

Stack Overflow用户
提问于 2022-07-19 09:05:12
回答 1查看 224关注 0票数 0

大家好,我错过了一些非常基本的东西,我真的很感激一些指导。

我对Blazor和实体框架相当陌生,并且正在构建我的第一个Blazor应用程序。

我有一个相当基本的数据类

代码语言:javascript
复制
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; } = " ";

    }
}

在我的控制器中使用的方法如下

代码语言:javascript
复制
        [HttpGet]
        public async Task <ActionResult<List<InvalidAddressMapping>>> GetInvalidAdressMappings()
        {
            return await _db.GetInvalidAddressMappings.FromSqlRaw("EXEC BIDM_GetInvalidAddressMappings;").ToListAsync();
        }

我试着在我的剃须刀页面上用它

代码语言:javascript
复制
@code {
    List<InvalidAddressMapping> invalidMappings = new List<InvalidAddressMapping>();


    protected override async Task OnInitializedAsync()
    {
            invalidMappings = await HttpClient.GetFromJsonAsync<List<InvalidAddressMapping>>(NavigationManager.BaseUri + "invalidmapping");  
    }
}

然而,当我尝试运行我的剃须刀页面im获得错误时,CS8601可能为空引用:

我不确定我是否完全理解,我可以用一些指导来指引我朝着正确的方向前进,这必须是我错过的一些相当基本的东西。

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

当我用

代码语言:javascript
复制
  //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数据列表

请帮助一个挣扎着的老家伙,把我推到一个我能理解我哪里出错的方向上:)

谢谢大家

EN

回答 1

Stack Overflow用户

发布于 2022-07-19 09:19:17

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

因此,安全版本是这样做的:

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73034149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档