【发布时间】:2014-02-14 09:28:37
【问题描述】:
我试图拦截所有异常,但代码从未运行。我试过把它放到GlobalFilters,也把它直接放到我的方法上。
我的属性:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class HandleExceptionAttribute : HandleErrorAttribute
{
private ILog log = LogManager.GetLogger(typeof(HandleExceptionAttribute));
public override void OnException(ExceptionContext filterContext)
{
log.Info("inside on exception"); // this never appears
}
}
我的班级:
public class Tester
{
[HandleException]
public void Except()
{
var asd = 0;
var qwe = 1 / asd;
}
}
除以零给我一个异常,我的调试器捕获它,我继续,但没有任何内容写入日志文件。
记录器工作。其他日志出现在文件中。即使我禁用调试,它也不会读取日志文件,因此不是调试器故障。
在 IIS Express 上运行它。视窗 7。
编辑:
将事物移至控制器。还是不行
public class UserController : ApiController
{
private ILog log = LogManager.GetLogger(typeof(UserController));
[HandleException]
[CheckModelForNull]
[ValidateModelState]
public object Post([FromBody]User user)
{
var asd = 0;
var qwe = 1 / asd;
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
【问题讨论】:
-
过滤器属性仅适用于动作和控制器。您可能正在寻找 AoP。
-
+1 提出一个很好的问题
-
你还没有这个属性。
-
@SLaks 看到我的最新更新,mby 是因为它的 apicontroller?
-
是的; MVC 和 Web API 完全不同。
标签: c# asp.net-mvc asp.net-mvc-4 exception-handling asp.net-apicontroller