要用try-catch包围的C#属性
本文关键字:属性 包围 try-catch 要用 | 更新日期: 2023-09-27 18:27:40
我发现自己用try编写方法{stuff}catch(异常e){log,其他东西}退出了一点,所以我试图弄清楚如何制作一个属性来帮助我。我已经非常广泛地检查了以下线程,似乎无法使我的实现正常工作。
属性似乎根本不起作用
ASP.NET MVC Controller.OnException未被调用
.net处理异常的属性-属性访问器上的用法
我的顶级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]属性复制了代码,但也无法在其中获得断点,所以我认为我的配置有问题,但我不知道是什么。
任何想法或想法都将不胜感激
从您提供的链接转到处理异常的.net属性-在属性访问器上使用您想要的属性是不可能的(请参阅Aaronaught第二个代码片段中的实现)。
除非使用某种方面框架,否则必须实现检查属性是否存在并自行操作的代码,并在每个catch(...)
语句中运行该代码。
你的想法很好,我可能会在自己的框架中使用它,但限制仍然存在,你必须自己实现它。