Value cannot be null. Arg_ParamName_Name' 报错

来源:8-5 【应用】使用PATCH部分更新资源

神奇的喵啊喵

2023-05-20

老师,您好!

请问报这样的错误是怎么回事,您能帮我看看吗

图片描述

    [HttpPatch("{touristRouteId}")]
    public IActionResult PartiallyUpdateTouristRoute(
         [FromRoute] Guid touristRouteId,
         [FromBody] JsonPatchDocument<TouristRouteForUpdateDto> patchDocument
     )
    {
        if (!_touristRouteRepository.TouristRouteExists(touristRouteId))
        {
            return NotFound("旅游路线找不到");
        }

        var touristRouteFromRepo = _touristRouteRepository.GetTouristRoute(touristRouteId);
        var touristRouteToPatch = _mapper.Map<TouristRouteForUpdateDto>(touristRouteFromRepo);
        patchDocument.ApplyTo(touristRouteToPatch);

        _mapper.Map(touristRouteToPatch, touristRouteFromRepo);
        _touristRouteRepository.Save();

        return NoContent();
    }
}
写回答

1回答

阿莱克斯刘

2024-09-27

System.ArgumentNullException 异常通常表示某个方法或函数接收到一个 null 引用作为参数,而这个参数是不允许为空的。在你的代码中,可能有几个地方会导致这个异常。以下是一些可能的原因和解决方法:

可能的原因
1. patchDocument 为 null: 如果传入的 patchDocument 为 null,调用 patchDocument.ApplyTo(touristRouteToPatch) 时会抛出 ArgumentNullException。
2. touristRouteFromRepo 为 null: 如果 touristRouteId 不存在于数据库中,_touristRouteRepository.GetTouristRoute(touristRouteId) 会返回 null,导致 _mapper.Map<TouristRouteForUpdateDto>(touristRouteFromRepo) 抛出异常。
3. touristRouteToPatch 为 null: 如果 _mapper.Map<TouristRouteForUpdateDto>(touristRouteFromRepo) 返回 null,调用 patchDocument.ApplyTo(touristRouteToPatch) 时会抛出异常。

新代码
[HttpPatch("{touristRouteId}")]
public IActionResult PartiallyUpdateTouristRoute(
     [FromRoute] Guid touristRouteId,
     [FromBody] JsonPatchDocument<TouristRouteForUpdateDto> patchDocument
)
{
    if (patchDocument == null)
    {
        return BadRequest("补丁文档不能为空");
    }

    if (!_touristRouteRepository.TouristRouteExists(touristRouteId))
    {
        return NotFound("旅游路线找不到");
    }

    var touristRouteFromRepo = _touristRouteRepository.GetTouristRoute(touristRouteId);
    if (touristRouteFromRepo == null)
    {
        return NotFound("旅游路线找不到");
    }

    var touristRouteToPatch = _mapper.Map<TouristRouteForUpdateDto>(touristRouteFromRepo);     if (touristRouteToPatch == null)     {         return BadRequest("映射失败");     }     patchDocument.ApplyTo(touristRouteToPatch);     _mapper.Map(touristRouteToPatch, touristRouteFromRepo);     _touristRouteRepository.Save();     return NoContent(); }
0
0

.Net 开发电商后端API 从0到精通RESTful

. Net 实战+RESTful思想纵深课程,开发优雅RESTful风格API。

979 学习 · 553 问题

查看课程