首页 > 解决方案 > 无法避免动作筛选器中的 NullReferenceException (ASP.NET Core)

问题描述

我正在编写一个用于设置LastAccessDate用户属性的操作过滤器。在从数据库中检索用户记录时,我得到NullReferenceException. 如何摆脱这个异常?这是我的动作过滤器:

public class LogActivity : IAsyncActionFilter
    {
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            var resultContext = await next();

            var id = int.Parse(resultContext.RouteData.Values["id"].ToString());
            var repo = resultContext.HttpContext.RequestServices.GetService<UserRepo>();
            
            Console.WriteLine(id);
            // var user = await repo.GetRespondent(id);

            var user= repo.GetRespondent(id).Result; <========= Here Exception occurs

            if (user != null)
            {
                user.LastAccessDate = DateTime.Now;
                await repo.SaveAll();
            }

        }
    }

这是我UserRepo的存储库的 get 方法:

public async Task<User> GetRespondent(int id)
        {
             var user= await _context.User.FirstOrDefaultAsync(u => u.Id == id);
            if (user!= null)
                 return user

            return null;
        }

标签: asp.net-coreaction-filter

解决方案


替换此行

var user= repo.GetRespondent(id).Result; <========= Here Exception occurs

var user = await repo.GetRespondent(id);


推荐阅读