.net NET中验证最佳实践的异常处理

.net NET中验证最佳实践的异常处理,.net,asp.net-mvc-3,exception-handling,.net,Asp.net Mvc 3,Exception Handling,我只是想知道在验证和逻辑上抛出错误是否是一种最佳实践,如下所示。我在控制器中的OneException方法中捕获这些内容,并将其作为JSON通过Ajax发送回客户端。像这样抛出异常可以吗 public void Update(EditTeacherModel model) { var entity = _teachersRepository.FindBy(model.Id); if(entity == null)

我只是想知道在验证和逻辑上抛出错误是否是一种最佳实践,如下所示。我在控制器中的OneException方法中捕获这些内容,并将其作为JSON通过Ajax发送回客户端。像这样抛出异常可以吗

public void Update(EditTeacherModel model)
        {
            var entity = _teachersRepository.FindBy(model.Id);

            if(entity == null)
                throw new NatGeoNotFoundException("Teacher");


        }

只要您对此有一个特殊的、干净的异常类型,我看不出这会成为问题的原因。异常是跳出多个嵌套调用堆栈帧的方便方法


不过,请注意,CLR上的异常速度非常慢。

只要您对此有一个特殊的、干净的异常类型,我看不出这会成为问题的原因。异常是跳出多个嵌套调用堆栈帧的方便方法


但是,请注意,CLR上的异常速度非常慢。

异常具有成本。处理自定义/业务错误的最佳实践是返回正确的错误代码

这里讨论了异常处理最佳实践:


这里也讨论了这一点:

例外情况具有成本。处理自定义/业务错误的最佳实践是返回正确的错误代码

这里讨论了异常处理最佳实践:


这里也讨论了这一点:

例外是昂贵的。我相信它们是为应用程序的意外行为而设计的


我认为验证错误永远不应该抛出异常

例外情况很昂贵。我相信它们是为应用程序的意外行为而设计的


我认为验证错误永远不应该抛出异常

这来自你的链接。对不应该被忽略的错误使用异常我将使用一个真实世界的例子。当开发一个API以便人们可以访问Crivo(我的产品)时,您应该做的第一件事是调用Login方法。如果登录失败或未被调用,则其他方法调用都将失败。我选择在登录方法失败时抛出一个异常,而不是简单地返回false,因此调用程序不能忽略它-这来自你的链接。对不应该被忽略的错误使用异常我将使用一个真实世界的例子。当开发一个API以便人们可以访问Crivo(我的产品)时,您应该做的第一件事是调用Login方法。如果登录失败或未被调用,则其他方法调用都将失败。我选择在登录方法失败时抛出一个异常,而不是简单地返回false,因此调用程序不能忽略它-