对以下操作运行代码分析会产生CA1062警告,建议我在使用前验证参数:
[HttpPost]
public ActionResult Index(SomeViewModel vm)
{
if (!ModelState.IsValid)
return View(vm);
// ... other code
return View(vm);
}
我意识到我可以通过添加以下内容来解决警告:
if(vm==null)
throw new ArgumentNullException("vm");
我的印象是,如果默认模型绑定成功,传入参数永远不会为null,并且不需要在“ModelState.IsValid”之外进行验证。
答案 0 :(得分:1)
我认为当MVC无法进行映射时,模型参数在开发期间可以为null,但我认为在正常操作期间它不应该。
在我看来,检查你的参数作为警告指出是不错的。
答案 1 :(得分:0)
这是一种公共方法,所以你不应该假设谁会调用它。虽然一个调用者(MVC框架)可能只调用具有非空值的方法,但其他潜在的调用者可能不那么“礼貌”。
那就是说,如果你的代码没有其他潜在的调用者(这对于MVC应用程序来说并不常见,而不是库),允许抛出NullReferenceException而不是ArgumentNullException可能是完全可以接受的。这在很大程度上取决于您对未来使用和代码库可维护性的期望。 (除此之外,如果通过ArgumentNullException发出信号,未来的维护开发人员可能会发现更容易识别问题。)