用try - catch包围的C#属性

时间:2012-03-13 04:01:43

标签: c# error-handling attributes

我发现自己用try {stuff} catch(异常e){log,其他东西}编写方法稍微退出,所以我试图弄清楚如何创建一个属性来帮助我。我已经非常广泛地检查了以下线程,似乎无法让我的实现工作。

attribute does not seem to act at all

ASP.NET MVC Controller.OnException not being called

.net Attributes that handle exceptions - usage on a property accessor

我的顶级web.config设置为

<customErrors mode="On" defaultRedirect="/error.html"/>

我在非调试模式下编译。我的属性如下:

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class SafeWebMethodAttribute: ActionFilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        filterContext.ThrowIfNull();

        if (filterContext.ExceptionHandled)
        {
            return;
        }
        Log.LogException(filterContext.Exception);
        filterContext.HttpContext.Response.StatusCode = 500;
        filterContext.HttpContext.Response.Write(filterContext.Exception);
        filterContext.ExceptionHandled = true;
    }
}

我在这里叫它 -

public class Test : Controller
{
    [SafeWebMethod]
    public ActionResult Test()
    {
        throw new ArgumentException("test");
    }
}

我似乎无法在属性中获得断点,或者我更改状态代码以使其显示。

我也复制了[HandleError]属性中的代码,也无法在那里得到断点,所以我认为我的配置有问题,但我无法弄清楚是什么。

非常感谢任何想法或想法

1 个答案:

答案 0 :(得分:2)

从您提供的.net Attributes that handle exceptions - usage on a property accessor链接中找不到您想要的内容(请参阅Aaronaught第二个代码段中的实现)。

除非您使用某种方面框架,否则您必须实现检查属性的presenc并自行处理它的代码,并在每个catch(...)语句中运行该代码。

你的想法很棒,我可能会在我自己的框架中使用它,但约束仍然是你必须自己实现它。

HTH

马里奥