Asp.net 如何从未绑定到特定模型属性的控制器返回错误到视图

Asp.net 如何从未绑定到特定模型属性的控制器返回错误到视图,asp.net,validation,exception,asp.net-mvc-2,Asp.net,Validation,Exception,Asp.net Mvc 2,好奇从控制器将错误返回到视图的最佳实践是什么,其中错误实际上不是验证错误,更像是“未找到用户”或“服务超时”类型的错误。(在ASP.NET MVC2框架中) 我一直在将它们添加到ModelState的模型错误中,但这似乎不合适。(尽管易于实施和维护) 示例-一个用户试图登录,但其凭据与已知用户不匹配。我认为您需要更清楚地了解您所称的错误 异常(超时、数据库错误等)应使用特定的异常处理程序进行处理(尤其是因为您通常不想向最终用户显示错误消息) 在这种情况下,请查看在控制器上重载OnExceptio

好奇从控制器将错误返回到视图的最佳实践是什么,其中错误实际上不是验证错误,更像是“未找到用户”或“服务超时”类型的错误。(在ASP.NET MVC2框架中)

我一直在将它们添加到ModelState的模型错误中,但这似乎不合适。(尽管易于实施和维护)


示例-一个用户试图登录,但其凭据与已知用户不匹配。

我认为您需要更清楚地了解您所称的错误

异常(超时、数据库错误等)应使用特定的异常处理程序进行处理(尤其是因为您通常不想向最终用户显示错误消息)

在这种情况下,请查看在控制器上重载
OnException()
方法。(或者让您的所有控制器继承自一个通用的ControllerBase,该ControllerBase重写了该方法以避免重复)

在处理异常时,您可能还需要检查
filterContext.HttpContext.IsCustomErrorEnabled
的值,以确定是公开详细的异常信息还是混淆它

请记住,异常应适用于异常情况-“正常”操作永远不会导致异常


您提到的另一种类型的错误更像是“由于业务规则/无效输入而无法处理请求”(或类似情况),在这种情况下,向ViewModel添加错误消息似乎是合适的。它们可能不是直接的验证错误,但它们很可能是用户输入的结果

我认为您需要更清楚地了解您所称的错误

异常(超时、数据库错误等)应使用特定的异常处理程序进行处理(尤其是因为您通常不想向最终用户显示错误消息)

在这种情况下,请查看在控制器上重载
OnException()
方法。(或者让您的所有控制器继承自一个通用的ControllerBase,该ControllerBase重写了该方法以避免重复)

在处理异常时,您可能还需要检查
filterContext.HttpContext.IsCustomErrorEnabled
的值,以确定是公开详细的异常信息还是混淆它

请记住,异常应适用于异常情况-“正常”操作永远不会导致异常


您提到的另一种类型的错误更像是“由于业务规则/无效输入而无法处理请求”(或类似情况),在这种情况下,向ViewModel添加错误消息似乎是合适的。它们可能不是直接的验证错误,但它们很可能是用户输入的结果

我刚刚对此进行了研究,我认为对于与网络相关的错误等,使用TempData是可以的(但出于安全原因,不要将异常放在内部,而只放在异常消息中)


我刚刚对此进行了研究,我认为对于与网络相关的错误等,使用TempData是可以的(但出于安全原因,不要将异常放在内部,而只放在异常消息中)