gpt4 book ai didi

asp.net-web-api - 你能告诉我IExceptionhandler的优点和缺点吗?

转载 作者:行者123 更新时间:2023-12-04 06:53:44 34 4
gpt4 key购买 nike

任何人都可以告诉我在 web api 中使用 IExceptionhandler 的优点和缺点吗?哪一个是处理 Web Api 异常的最佳方法?

在我下面的示例中,我使用 IExceptionHandler 来处理我所有的 web api 异常。在 HandleCore 方法中,我正在处理 Httpexceptions、MyCustomerrormessages、未处理的异常。谁能告诉我,在我的 IExceptionHandler 的 HandleCore 方法中处理所有异常是一种正确的方法吗?

命名空间 AccessServices.EntityModel{

/// <summary>
/// To Handle the unhandled exceptions caught by Web API.
/// </summary>
public class CustomExceptionHandler : IExceptionHandler
{
public virtual Task HandleAsync(ExceptionHandlerContext context,
CancellationToken cancellationToken)
{
if (!ShouldHandle(context))
{
return Task.FromResult(0);
}

return HandleAsyncCore(context, cancellationToken);
}

public virtual Task HandleAsyncCore(ExceptionHandlerContext context,
CancellationToken cancellationToken)
{
HandleCore(context);
return Task.FromResult(0);
}

public virtual void HandleCore(ExceptionHandlerContext context)
{
}

public virtual bool ShouldHandle(ExceptionHandlerContext context)
{
return context.ExceptionContext.CatchBlock.IsTopLevel;
}

}

/// <summary>
///Response to unhandled exceptions caught by Web API.
/// </summary>
public class OopsExceptionHandler : CustomExceptionHandler
{
public override void HandleCore(ExceptionHandlerContext context)
{
var exception = context.Exception;

if (exception is HttpException)
{
var httpException = (HttpException)exception;
context.Result = new TextPlainErrorResult
{
Request = context.ExceptionContext.Request,
Content = exception.Message,
Statuscode=(HttpStatusCode)httpException.GetHttpCode()
};

}
else if (exception is MyCustomException)
{

context.Result = new TextPlainErrorResult
{
//Request = context.ExceptionContext.Request,
Content = MyCustomException.Message,
Statuscode = MyCustomException.StatusCode
};

}

else
{
context.Result = new TextPlainErrorResult
{
Request = context.ExceptionContext.Request,
Content = "Oops! Sorry! Something went wrong." +
"Please contact Administrator",
Statuscode=HttpStatusCode.InternalServerError
};
}
}
/// <summary>
/// Sends HttpResponseMessage to the client
/// </summary>
private class TextPlainErrorResult : IHttpActionResult
{
public HttpRequestMessage Request { get; set; }
public string Content { get; set; }
public HttpStatusCode Statuscode { get; set; }

public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(Statuscode)

{
Content = new StringContent(Content),
RequestMessage = Request
};
return Task.FromResult(response);
}
}
}

最佳答案

IExceptionHandler 旨在为 Web API 中发生的未处理异常提供全局错误处理机制。

ExceptionFilterAttributes 只能处理来自 Web API 的某些区域的异常……例如,如果从身份验证过滤器、授权过滤器、操作过滤器和操作中抛出任何异常。

如果异常被抛出,例如,从 MessageHandlers、路由匹配或写出响应时,异常过滤器不会被调用,因为它们位于分层堆栈的高处。因此,此处的全局错误处理功能(IExceptionLoggerIExceptionHandler)尝试在所有层中提供一致的体验。

关于asp.net-web-api - 你能告诉我IExceptionhandler的优点和缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163984/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com