【问题标题】:How to customize problem details in .net core 2.2 for exception handling如何在 .net core 2.2 中自定义问题细节以进行异常处理
【发布时间】:2020-03-08 19:37:20
【问题描述】:

我想在 .Net Core API 项目中处理不同类型的异常并返回自定义错误响应。 例如,授权错误、内部服务器错误、验证错误等,我想抛出常见的自定义错误。

为此,我正在考虑自定义 ProblemDetails。

内部服务器错误响应如下,

var problemDetails = new ProblemDetails
            {
                Status = (int)HttpStatusCode.InternalServerError,
                Instance = feature?.Path,
                Title = isDev ? $"{ex?.GetType().Name}: {ex?.Message}" : "An error occurred.",
                Detail = isDev ? ex?.StackTrace : null,
            }; 

对于授权,错误响应如下所示,

 return AuthenticateResult.Fail("Missing Authorization Header.");

对于数据库中不可用的数据,响应如下,

return NotFound();

我使用自定义中间件来处理内部服务器错误,

[Route("/error")]
        [HttpGet]
        [ApiExplorerSettings(IgnoreApi = true)]
        public ActionResult Error([FromServices] IHostingEnvironment webHostEnvironment)
        {
            var feature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
            var ex = feature?.Error;
            var isDev = webHostEnvironment.IsDevelopment();
            var problemDetails = new ProblemDetails
            {
                Status = (int)HttpStatusCode.InternalServerError,
                Instance = feature?.Path,
                Title = isDev ? $"{ex?.GetType().Name}: {ex?.Message}" : "An error occurred.",
                Detail = isDev ? ex?.StackTrace : null,
            };

            return StatusCode(problemDetails.Status.Value, problemDetails);
        }

由于每种返回响应类型的格式不同,使用我的 Web API 的人要求我提供带有自定义消息的通用响应类型。怎么做?任何想法?如何带来所有不同类型的响应/自定义错误,如授权、无效请求、内部服务器错误等,

【问题讨论】:

    标签: c# asp.net-core .net-core .net-core-2.2


    【解决方案1】:

    您可以实现您的自定义模型并将其返回。模型可以有 StatusCode(1**,2**,3**,4**,5**) , ResponseMessage ("internal server error","resurse not fount" 等)和 body(你的对象)。您可以响应的任何请求OK(customModel)

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2017-03-29
      • 2017-11-09
      • 2023-04-08
      • 2023-04-08
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      相关资源
      最近更新 更多