我想处理任何带有ErrorView模型和错误视图的控制器操作引发的异常。这个想法是有类似的东西:
[InformClientOfExceptions(typeof(MyErrorHandler))]
public ActionResult MyAction(Int32 someId)
{
//...code
}
然后可能有一些MyErrorHandler类实现了一个新的接口IErrorView:
public class MyErrorHander : IErrorView
{
public ActionResult OnException(Exception ex)
{
//..code which converts exception to some error view model and returns the view
当操作抛出异常时,该属性会修复指定的类并将异常传递给它,然后处理异常(在基本情况下格式化并输出)。现在是的,异常应该永远不会发生,或至少得到妥善处理,但我希望有一种更好的方式来编写它。我不想使用自定义错误页面,因为我希望扩展此模式以允许对某些类型的异常进行更复杂的响应。任何想法如何最好地解决这个问题?
答案 0 :(得分:1)
[HandleError]
会查找Error
视图。您可以指定视图,并使用参数
[HandleError(ExceptionType = typeof(ArgumentException), View = "ErrorViewForThatException"]
您可以将该属性放在操作或控制器类上。它并不完全符合您的要求,但它非常接近。
答案 1 :(得分:0)
你试过[HandleError]
吗?
答案 2 :(得分:0)
创建一个继承自FilterAttribute的类,并实现IExceptionFilter属性(类似的东西)。此组合用于记录异常,您可以按照指定的方式接收用于记录异常的对象类型。
答案 3 :(得分:0)
除非您使用MVC中默认包含的构造,例如[HandleError]
方法,您实际讨论的是面向方面编程(AOP)。要实现类似的AOP解决方案,您需要使用后期编织框架,该框架将在代码中合并以实现您期望的结果,例如PostSharp或LinFu.AOP。要在没有构建编织框架的情况下实现这一点,您需要通过接口和使用动态代理(例如Castle.DynamicProxy或LinFu.DynamicProxy)来处理它。