【发布时间】:2019-01-24 07:43:46
【问题描述】:
我尝试使用中间件来处理异常。我写了一些代码,但它不起作用。有问题。通常,如果我使用 try catch 范围,我可以捕获异常。但我无法抓住中间件。怎么了?
我在尝试范围内寻找结果实体。结果实体有一个例外,所以我尝试使用 if 条件。我解决了这个问题,但我认为这是不可接受的:)
我在业务层(洋葱架构)中抛出了一些异常
例如:throw new Exception("have a problem");
还有我在 webapi 层的中间件类。如果我发现错误,我想发送响应一些数据。
下面是我的中间件代码
public class ExceptionHandlingMiddleware
{
private readonly RequestDelegate _next;
public ExceptionHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public Task Invoke(HttpContext httpContext)
{
try
{
var result = _next(httpContext);
if (result.Exception != null)
throw result.Exception;
return result;
}
catch (Exception ex)
{
return HandleExceptionAsync(httpContext, ex);
}
}
private Task HandleExceptionAsync(HttpContext context, Exception exception)
{
var code = ResponseCode.Alliswell;
switch (exception)
{
case ServiceException _:
code = ResponseCode.ServiceError;
break;
case BusinessException _:
code = ResponseCode.BusinessError;
break;
case DataLayerException _:
code = ResponseCode.DataLayerError;
break;
case EsriServiceException _:
code = ResponseCode.EsriServiceError;
break;
}
//var result = JsonConvert.SerializeObject(new { error = ex.Message });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
var responseEntity = new Response<object>
{
Data = null,
Code = code,
ErrorMessage = exception.Message,
State = ResponseState.Error
};
var result = context.Response.WriteAsync(JsonConvert.SerializeObject(responseEntity));
return result;
}
}
【问题讨论】:
标签: exception-handling .net-core asp.net-core-2.0 asp.net-core-webapi asp.net-core-middleware