C# ExceptionFilter OneException未被调用
我不擅长使用例外过滤器 点击链接: 我已经创建了一个类C# ExceptionFilter OneException未被调用,c#,asp.net-mvc,exception-handling,C#,Asp.net Mvc,Exception Handling,我不擅长使用例外过滤器 点击链接: 我已经创建了一个类 public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { if (context.Exception is NotImplementedException) {
public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is NotImplementedException)
{
context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
}
然后,我在控制器的单个方法上使用了该属性。我还没有全局添加过滤器,因为我希望它现在可以在单个方法上工作
public class HomeController : Controller
{
[NotImplExceptionFilter]
public void Test()
{
throw new NotImplementedException("This method is not implemented");
}
}
但并非每次我抛出错误时都会调用OnExepction。请让我知道我遗漏了什么我想你的问题是你继承了
Controller
类,而不是ApiController
由于您在此属性中使用的是System.Web.Http
命名空间,因此它仅适用于Api控制器
如果您还想使用其他控制器,则需要添加另一个异常过滤器属性,但在这种情况下,不要使用System.Web.Http
,而是使用System.Web.Mvc
命名空间,而其他部分将几乎是相同的代码(只有一些小的更改)
再次重写
OnException
,并将逻辑放在其中,但请记住,这两种方式在向用户实际显示错误消息的方式上是不同的。第一个使用响应来显示消息,另一个必须以不同的方式实现。可能看看这个我认为您的问题是您继承了Controller
类,而不是ApiController
由于您在此属性中使用的是System.Web.Http
命名空间,因此它仅适用于Api控制器
如果您还想使用其他控制器,则需要添加另一个异常过滤器属性,但在这种情况下,不要使用System.Web.Http
,而是使用System.Web.Mvc
命名空间,而其他部分将几乎是相同的代码(只有一些小的更改)
再次重写
OnException
,并将逻辑放在其中,但请记住,这两种方式在向用户实际显示错误消息的方式上是不同的。第一个使用响应来显示消息,另一个必须以不同的方式实现。可能看看这个您的另一个问题是缺少System.Web.Mvc.FilterAttribute,一旦应用该属性,它应该会按预期触发。(前提是您更改使用IEExceptionFilter/ExceptionContext而不是ExceptionFilterAttribute/HttpActionExecutedContext,如前所述)
例如:
[AttributeUsage(AttributeTargets.Method]
public class NotImplExceptionFilterAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext) {
{
if (filterContext.Exception is NotImplementedException)
{
filterContext.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
}
您的另一个问题是缺少System.Web.Mvc.FilterAttribute,一旦应用该属性,它将按预期触发。(如果您更改使用IEExceptionFilter/ExceptionContext而不是ExceptionFilterAttribute/HttpActionExecutedContext,如前所述) 例如:
[AttributeUsage(AttributeTargets.Method]
public class NotImplExceptionFilterAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext) {
{
if (filterContext.Exception is NotImplementedException)
{
filterContext.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
}
无法执行。因为我的控制器上有一些操作正在使用视图,如果我使用ApicController,它将出错。异常处理是否仅在ApicController上有效?在这种情况下,它仅对api控制器有效,因为您当前使用的是
System.Web.Http
namespace.hmm,但是有没有一种方法可以使用error handling在控制器上而不是在ApiController上?@HVT_08查看编辑。最后,有一种方法可以向用户显示错误消息。您可以自定义这样做的方式,但总体思路仍然是它帮助无法做到的。因为我的控制器上有一些操作正在使用视图,如果我使用ApiController,它将出错。异常处理是否仅适用于ApicController?在本例中,它仅适用于api控制器,因为您当前使用的是System.Web.Http
namespace.hmm,但是有没有一种方法可以在不在ApicController上的控制器上使用错误处理?@HVT_08查看编辑。最后,有一种方法可以向用户显示错误消息用户。您可以定制这样做的方式,但总体思路与它所帮助的相同