MVC 应用程序级别捕捉异常

捕捉异常:

using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Web;
using System.Web.Http.Controllers;
using System.Web.Mvc;
using Newtonsoft.Json;
using System.Web.Http.Filters;
using Rongzi.BZone.Admin.Models;
using Rongzi.BZone.Common.Util;


namespace Rongzi.BZone.Admin.Functions
{
    public class ApiExceptionFilterAttribute : System.Web.Http.Filters.ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext context)
        {
            if (context.Exception is NotImplementedException)
            {
                context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
            }
            LogHelper.Error("被系统过滤捕获的异常", context.Exception);

            StringBuilder sbMsg = new StringBuilder();
            sbMsg.AppendFormat("ControllerName={0},ActionName={1},Msg={2},StackTrace={3}",
                context.ActionContext.ControllerContext.ControllerDescriptor.ControllerName,
                context.ActionContext.ActionDescriptor.ActionName,
                context.Exception.Message,
                context.Exception.StackTrace);
            LogHelper.Exception(sbMsg.ToString());

            var customerError = new ResponseContext
            {
                Head = new ResponseHead
                {
                    Ret = -1,
                    Code = ErrCode.Failure,
                    Msg = context.Exception.Message.ToString()
                },
                Content = ""
            };
            context.Response = context.Request.CreateResponse(HttpStatusCode.BadRequest, customerError);
        }
    }
}

找不到地址

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Web;

namespace Rongzi.BZone.Admin.Functions
{
    /// <summary>
    /// api返回异常状态时响应处理
    /// </summary>
    public class ResponseDelegatingHandler : DelegatingHandler
    {
        async protected override Task<HttpResponseMessage> SendAsync(
                HttpRequestMessage request, CancellationToken cancellationToken)
        {
            HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
            if (response.StatusCode == HttpStatusCode.MethodNotAllowed || response.StatusCode == HttpStatusCode.NotFound)
            {
                var customerError = new ResponseContext
                {
                    Head = new ResponseHead
                    {
                        Ret = -1,
                        Code = ErrCode.Failure,
                        Msg = (response.StatusCode == HttpStatusCode.MethodNotAllowed) ? "请求的资源上不允许请求方法(POST或GET)" : "访问的页面不存在"
                    },
                    Content = ""
                };
                response = request.CreateResponse(HttpStatusCode.BadRequest, customerError);
            }
            return response;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值