提问人:Какосян Владимир 提问时间:11/17/2023 更新时间:11/17/2023 访问量:28
如何配置全局错误处理程序?
How can I configure my global error handler?
问:
我有我的自定义错误类: 使用 Newtonsoft.Json;
namespace Services.Errors.Exceptions;
public class HttpResponseException : Exception
{
public int StatusCode { get; private set; }
public HttpResponseException(int statusCode , string message) : base(message)
{
StatusCode = statusCode;
}
}
我还有一个错误处理程序:
using System.Net;
using System.Text.Json;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json;
using Services.Contracts;
using Services.Errors.Exceptions;
using JsonSerializer = System.Text.Json.JsonSerializer;
namespace Services.Errors.Handler;
public class ErrorHandlingMiddleware : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
if (context.Exception is HttpResponseException httpResponseMessage)
{
var error = new ErrorDto()
{
Code = httpResponseMessage.StatusCode,
Description = context.Exception.Message
};
context.Result = new JsonResult(error) { StatusCode = (int)httpResponseMessage.StatusCode};
}
}
}
我在 Program.cs 类中注册了我的处理程序,它应该向控制器返回响应:
builder.Services.AddControllers(options =>
{
options.Filters.Add(typeof(ErrorHandlingMiddleware));
});
我有一个问题。例如,当我抛出自定义异常时,例如在控制器中:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using Host.Core.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Sentry;
using Services.Abstractions;
using Services.Contracts;
using Services.Errors.Exceptions;
namespace Host.Core.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class CheckController : ControllerBase
{
private ILogger<CheckController> _logger;
private IServiceIntegration _service;
private IMapper _mapper;
public CheckController(ILogger<CheckController> logger, IServiceIntegration service, IMapper mapper)
{
_logger = logger;
_service = service;
_mapper = mapper;
}
[HttpPost]
public async Task<IActionResult> Client(TransactionModel trnModel)
{
throw new HttpResponseException(404, "NotFound");
}
}
}
它返回我期望的响应:
{
"code": 404,
"description": "NotFound"
}
但是当我在发送请求时收到 404 错误并且抛出异常时,类中的正常错误将返回给我 Exception():
System.Exception: Services.Errors.Exceptions.HttpResponseException: NotFound
答: 暂无答案
评论