ExceptionFilter 不运行 .NET Core Web API



我对操作过滤器有问题。我的筛选器都没有运行。我正在使用.NET Core 2.2并构建Web API。我在控制器中使用[自定义异常过滤器]注册了它:

[HttpDelete("{id}")]
[CustomExceptionFilter]
public IActionResult Delete(int id)
{
var piano = _repository.GetPianoById(id);
if (piano == null) throw new Exception(); 
_repository.Delete(id);
return Ok();
}

这是我的异常过滤器:

using System.Web.Http.Filters;
public class CustomExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
HttpStatusCode status = HttpStatusCode.InternalServerError;
String message = String.Empty;
var exceptionType = actionExecutedContext.Exception.GetType();
if (exceptionType == typeof(Exception))
{
message = "Incorrect ID.";
status = HttpStatusCode.NotFound;
}
actionExecutedContext.Response = new HttpResponseMessage()
{
Content = new StringContent(message, System.Text.Encoding.UTF8, "text/plain"),
StatusCode = status
};
base.OnException(actionExecutedContext);
}

可能出了什么问题?

我不确定你的例子有什么问题,但这就是我的做法。

首先是异常过滤器:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{

然后,我将过滤器添加到整个控制器中,而不仅仅是一个操作,尽管这可能也可以工作 - 我从未尝试过:

[ServiceFilter(typeof(CustomExceptionFilterAttribute))]
public class MyController : ControllerBase
{

在 Startup.cs, ConfigureServices 中,添加 DI 支持:

services.AddScoped<CustomExceptionFilterAttribute>();

本博客将详细介绍。

最新更新