ExceptionFilter 没有 运行 .NET Core Web Api
ExceptionFilter doesn't run .NET Core Web Api
我对动作过滤器有疑问。 None 个过滤器 运行。我正在使用 .NET Core 2.2 并构建 Web Api。我在控制器中使用 [CustomExceptionFilter] 注册了它:
[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>();
这 blog 更详细。
我对动作过滤器有疑问。 None 个过滤器 运行。我正在使用 .NET Core 2.2 并构建 Web Api。我在控制器中使用 [CustomExceptionFilter] 注册了它:
[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>();
这 blog 更详细。