Asp.net mvc 3 是否有解决MVC控制器操作的CA1062的首选方法?

Asp.net mvc 3 是否有解决MVC控制器操作的CA1062的首选方法?,asp.net-mvc-3,code-analysis,Asp.net Mvc 3,Code Analysis,对以下操作运行代码分析会导致CA1062警告,建议我在使用参数之前验证参数: [HttpPost] public ActionResult Index(SomeViewModel vm) { if (!ModelState.IsValid) return View(vm); // ... other code return View(vm); } 我意识到我可以通过添加以下内容来解决警告: if(vm==null) throw new Ar

对以下操作运行代码分析会导致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”之外进行验证

  • 是这样吗
  • 是否有一种被广泛接受的技术来解决MVC操作的警告

  • 我认为当MVC无法进行映射时,模型参数在开发期间可以为null,但我认为在正常操作期间不应该为null


    在我看来,正如警告所指出的,检查您的参数并不是坏事。

    我认为当MVC无法进行映射时,模型参数在开发期间可以为null,但我认为在正常操作期间不应该为null


    在我看来,正如警告所指出的,检查您的参数并不是坏事。

    这是一种公共方法,因此您不应该假设谁将调用它。虽然一个调用方(MVC框架)可能只调用具有非空值的方法,但其他潜在调用方可能不太“礼貌”


    也就是说,如果您的代码没有其他潜在的调用者(这对于MVC应用程序来说并不罕见,与库相反),那么允许抛出NullReferenceException而不是ArgumentNullException可能是完全可以接受的。这在很大程度上取决于您对代码库的未来使用和可维护性的期望。(除其他事项外,未来的维护开发人员可能会发现,如果通过ArgumentNullException发出信号,则更容易识别问题。)

    这是一种公共方法,因此您不应该假设谁将调用它。虽然一个调用方(MVC框架)可能只调用具有非空值的方法,但其他潜在调用方可能不太“礼貌”

    也就是说,如果您的代码没有其他潜在的调用者(这对于MVC应用程序来说并不罕见,与库相反),那么允许抛出NullReferenceException而不是ArgumentNullException可能是完全可以接受的。这在很大程度上取决于您对代码库的未来使用和可维护性的期望。(除其他事项外,未来的维护开发人员可能会发现,如果通过异常发出信号,则更容易识别问题。)