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(); }
00