美文网首页.NetCore3.0 WebApi
Asp.netCore3.0 WebApi从0到1手摸手教你写【

Asp.netCore3.0 WebApi从0到1手摸手教你写【

作者: 我是Mr小赵先生 | 来源:发表于2019-10-25 16:43 被阅读0次

    当用户调用我们接口发生异常时,默认情况下会返回一堆错误信息,这样既不友好,同时也会暴露服务器相关的一些敏感信息。有人可能会说,我可以在每段程序添加try catch 语句,这样就不会返回错误信息了,那万一哪一天你忘记写了,或者你同事也没有写,不还是解决不了这个问题吗?今天我们就来给之前写的webapi增加个异常处理。

    增加异常处理类

    在XXX.api项目下新增一个类,起名MyExceptionFilter.cs(这个名字是自己起的,可以随意,但是推荐最后要以ExceptionFilter结尾)然后继承IExceptionFilter。当接口出现异常时我们统一返回一段json字符串{ "code": 0, "message": "接口开小差了" },剩下的代码如下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;
    
    namespace XXX.api
    {
        /// <summary>
        /// 自定义webapi异常处理
        /// </summary>
        public class MyExceptionFilter : IExceptionFilter
        {
            /// <summary>
            /// 发送异常时执行的代码
            /// </summary>
            /// <param name="context"></param>
            public void OnException(ExceptionContext context)
            {
                Models.RetModel ret = new Models.RetModel();
                ret.code = 0;
                ret.message = "接口开小差了";
                string errRet= Newtonsoft.Json.JsonConvert.SerializeObject(ret);
                if (context.ExceptionHandled==false)
                {
                    context.Result = new ContentResult
                    {
                        Content = errRet,
                        StatusCode = StatusCodes.Status200OK,
                        ContentType="application/json"
                    };
                }
                context.ExceptionHandled = true;
            }
            /// <summary>
            /// 异步发送异常时执行的代码
            /// </summary>
            /// <param name="context"></param>
            /// <returns></returns>
            public Task OnExceptionAsync(ExceptionContext context)
            {
                OnException(context);
                return Task.CompletedTask;
            }
        }
    }
    
    

    配置Startup.cs

    在ConfigureServices中添加过滤器,MyExceptionFilter就是上面我们自定义的异常过滤器

     services.AddControllers(option=> {
                    option.Filters.Add(new MyExceptionFilter());
                });
    

    测试

    写完代码测试,是一个程序员分内之事。
    为了触发异常,我们修改下数据库连接字符串,把数据库名称改成其它名字,这样在查数据库的时候就会出现异常了。
    我们使用postman或者Swagger接口文档来测试,结果如下:


    测试结果

    接口抛出了异常,将一段自定义的代码返回给了客户。

    今天的教程就到这里了,项目已经上传github,地址如下:https://github.com/xiaxiaoqian/NetCore3.0-WebApi

    求赞

    写作不易,如果这篇文章对你有用请给作者一个赞吧!

    相关文章

      网友评论

        本文标题:Asp.netCore3.0 WebApi从0到1手摸手教你写【

        本文链接:https://www.haomeiwen.com/subject/zxtevctx.html