小编use*_*492的帖子

在ASP.NET Web Api中使用"ExceptionHandler"需要一个完整的示例来处理未处理的异常?

我查看了这个链接 http://www.asp.net/web-api/overview/web-api-routing-and-actions/web-api-global-error-handling.在这个链接中他们提到了这样的

class OopsExceptionHandler : ExceptionHandler
{
    public override void HandleCore(ExceptionHandlerContext context)
    {
        context.Result = new TextPlainErrorResult
        {
            Request = context.ExceptionContext.Request,
            Content = "Oops! Sorry! Something went wrong." +
                      "Please contact support@contoso.com so we can try to fix it."
        };
    }

    private class TextPlainErrorResult : IHttpActionResult
    {
        public HttpRequestMessage Request { get; set; }

        public string Content { get; set; }

        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            HttpResponseMessage response = 
                             new HttpResponseMessage(HttpStatusCode.InternalServerError);
            response.Content = new StringContent(Content);
            response.RequestMessage = Request;
            return …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling asp.net-web-api

33
推荐指数
2
解决办法
2万
查看次数

任何人都可以使用示例客户端应用程序解释IExceptionHandler的工作流程

我在本示例中面临以下问题:

我无法找到IsOutermostCatchBlockExceptionContext

如果发生异常,则此HandleAsync方法执行两次.

(http://www.asp.net/web-api/overview/web-api-routing-and-actions/web-api-global-error-handling)

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.IsOutermostCatchBlock;
        }

    }

    public class OopsExceptionHandler : CustomExceptionHandler
    {
        public override void HandleCore(ExceptionHandlerContext context)
        {
            context.Result = new TextPlainErrorResult …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

8
推荐指数
1
解决办法
4525
查看次数

标签 统计

asp.net-web-api ×2

c# ×2

exception-handling ×1