C# 如何在.net core 2.2中自定义异常处理的问题详细信息

C# 如何在.net core 2.2中自定义异常处理的问题详细信息,c#,asp.net-core,.net-core,.net-core-2.2,C#,Asp.net Core,.net Core,.net Core 2.2,我想在.Net核心API项目中处理不同类型的异常,并返回自定义错误响应。 例如,授权错误、内部服务器错误、验证错误等,我想抛出常见的自定义错误 为此,我考虑定制问题细节 内部服务器错误响应如下所示 var problemDetails = new ProblemDetails { Status = (int)HttpStatusCode.InternalServerError, Instance = feat

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

为此,我考虑定制问题细节

内部服务器错误响应如下所示

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();
对于数据库中不可用的数据,响应如下:

 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);
        }
[路由(“/error”)]
[HttpGet]
[ApiExplorerSettings(IgnoreApi=true)]
公共操作结果错误([FromServices]IHostingEnvironment webHostEnvironment)
{
var feature=HttpContext.Features.Get();
var ex=特征?错误;
var isDev=webHostEnvironment.IsDevelopment();
var problemDetails=新的problemDetails
{
状态=(int)HttpStatusCode.InternalServerError,
实例=特征?路径,
Title=isDev?$“{ex?.GetType().Name}:{ex?.Message}”:“发生了一个错误。”,
详细信息=isDev?ex?.StackTrace:空,
};
返回状态代码(problemDetails.Status.Value,problemDetails);
}

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

您可以实现自定义模型并返回它。模型可以有状态代码(1**,2**,3**,4**,5**),响应消息(“内部服务器错误”,“重新启动非fount”等)和主体(您的对象)。您可以响应的任何请求确定(customModel)