C#使用属性处理MVC中的异常

C#使用属性处理MVC中的异常,c#,asp.net,asp.net-mvc,attributes,C#,Asp.net,Asp.net Mvc,Attributes,我想用ErrorView模型和ErrorView处理任何控制器操作引发的异常。这个想法是要有这样的东西: [InformClientOfExceptions(typeof(MyErrorHandler))] public ActionResult MyAction(Int32 someId) { //...code } 然后可能会有一些实现新接口IErrorView的MyErrorHandler类: public class MyErrorHander : IErrorView {

我想用ErrorView模型和ErrorView处理任何控制器操作引发的异常。这个想法是要有这样的东西:

[InformClientOfExceptions(typeof(MyErrorHandler))]
public ActionResult MyAction(Int32 someId)
{
    //...code
}
然后可能会有一些实现新接口IErrorView的MyErrorHandler类:

public class MyErrorHander : IErrorView
{
    public ActionResult OnException(Exception ex)
    {
        //..code which converts exception to some error view model and returns the view

当操作引发异常时,该属性将创建指定的类并将异常传递给它,然后处理异常(在基本情况下为格式化并输出)。现在是的,异常永远不会发生,或者至少应该得到适当的处理,但是我想用一种更好的方式来写这篇文章。我不想使用自定义错误页面,因为我想扩展此模式以允许对某些类型的异常进行更复杂的响应。有什么好办法吗?

你有没有尝试过
[HandleError]

你有没有尝试过
[HandleError]

创建一个从FilterAttribute继承并实现IEExceptionFilter属性的类(类似的)。此组合用于记录异常,您可以采用指定的用于记录异常的对象类型。

创建一个从FilterAttribute继承并实现IEExceptionFilter属性的类(类似于此)。此组合用于记录异常,您可以采用指定的用于记录异常的对象类型。

[HandleError]
默认情况下将查找
错误视图。您可以指定视图,并通过参数异常进行限制

[HandleError(ExceptionType = typeof(ArgumentException), View = "ErrorViewForThatException"]

您可以将该属性放在操作或控制器类上。它并不完全满足您的需要,但它非常接近。

[HandleError]
默认情况下会查找
错误视图。您可以指定视图,并通过参数异常进行限制

[HandleError(ExceptionType = typeof(ArgumentException), View = "ErrorViewForThatException"]

您可以将该属性放在操作或控制器类上。它并不完全满足您的需要,但它非常接近您。

除了使用默认情况下包含在MVC中的构造(如
[HandleError]
方法)之外,您实际讨论的是面向方面编程(AOP)。要实现与之类似的AOP解决方案,您需要使用生成后编织框架,该框架将在代码中进行合并,以实现所需的结果,如PostSharp或LinFu.AOP。要在没有构建编织框架的情况下实现这一点,您需要通过接口和使用动态代理(如Castle.DynamicProxy或LinFu.DynamicProxy)来处理它。

除了使用默认包含在MVC中的构造(如
[HandleError]
方法论您实际上讨论的是面向方面编程(AOP)。要实现与之类似的AOP解决方案,您需要使用生成后编织框架,该框架将在代码中进行合并,以实现所需的结果,如PostSharp或LinFu.AOP。要在没有构建编织框架的情况下实现这一点,您需要通过接口和使用动态代理(如Castle.DynamicProxy或LinFu.DynamicProxy)来处理它。

Duplicate?我不同意这个问题是重复的,因为他真的在问如何使用AOP处理错误,以及有哪些选项可以与ASP.NET MVC.duplicate结合实现AOP的优点?我不同意这个问题是重复的,因为他真的在问如何使用AOP处理错误,以及有哪些选项可以实现与ASP.NET MVC相结合的AOP优势。