当前位置: 首页 > news >正文

网站运营方案有做企业网站的吗

网站运营方案,有做企业网站的吗,深圳手机建站模板,拉新推广渠道微信公众号#xff1a;趣编程ACE关注可了解每日一更的.NET日常实战开发技巧#xff0c;欢迎公众号留言开发 获取源码;.NET6中全局异常处理异常处理是我们在程序开发中不可或缺的一环#xff0c;下文我将会结合程序Sample讲解如何在.NET6中有效处理异常。Try-Ctach 块包裹自定… 微信公众号趣编程ACE关注可了解每日一更的.NET日常实战开发技巧欢迎公众号留言开发 获取源码;.NET6中全局异常处理异常处理是我们在程序开发中不可或缺的一环下文我将会结合程序Sample讲解如何在.NET6中有效处理异常。Try-Ctach 块包裹自定义异常中间件Try-Catch 块Try-Catch 是最基本的异常处理方法下面我们看下例子。创建一个基于.net6的Asp.Net Core Web Api项目1using ExceptionHandling.Services;2using Microsoft.AspNetCore.Mvc;3namespace ExceptionHandling.Controllers;45[ApiController]6[Route(api/[controller])]7public class UserController : Controller8{9    private readonly IUserService _userService; 10    private readonly ILoggerUserController _logger; 11 12    /// summary 13    /// 依赖注入 IUserService ILoggerUserController 14    /// /summary 15    /// param nameuserService/param 16    /// param namelogger/param 17    public UserController(IUserService userService, ILoggerUserController logger) 18    { 19        _userService  userService; 20        _logger  logger; 21    } 22 23    [HttpGet] 24    public IActionResult GetUsers() 25    { 26 27       try 28       { 29           _logger.LogInformation(Get User Details); 30 31           var result  _userService.GetUsers(); 32           if(result.Count0) 33            throw new ApplicationException(Get User failed); // 此处抛出一个获取用户出错异常 34 35           return Ok(result); 36       } 37       catch (System.Exception e) 38       { 39           _logger.LogError(e.Message); 40           return BadRequest(获取失败); // 返回给前端 41       } 42    } 43}我们在VsCode里面按照一个Postman插件PostCode 调用上面接口https://localhost:7218/api/User通过结果可知当我们没有获取到用户的时候代码将会抛出一个Get User failed的异常见上图。对于初学者来说这是最常见最基础的方法但是这个方法对于大项目来说也有一个缺点。如果项目中有许多控制器和动作方法然后我们需要对每一个动作方法都使用try-catch,那么在这种情况下用try-catch就很累赘也会增加代码行数。此时就需要自定义一个处理全局异常的中间件啦使用这个方法的好处就是我们可以在一个地方捕获未处理的异常而不需要在每个动作方法中使用try-catch。自定义中间件处理异常在根目录下创建一个Middlewares文件夹新建一个名为ExceptionHandlingMiddleware.cs类1using System.Net;2using System.Text.Json;3using ExceptionHandling.Models.Responses;45namespace ExceptionHandling.Middlewares;67public class ExceptionHandlingMiddleware8{9    private readonly RequestDelegate _next;  // 用来处理上下文请求   10    private readonly ILoggerExceptionHandlingMiddleware _logger; 11    public ExceptionHandlingMiddleware(RequestDelegate next, ILoggerExceptionHandlingMiddleware logger) 12    { 13        _next  next; 14        _logger  logger; 15    } 16 17    public async Task InvokeAsync(HttpContext httpContext) 18    { 19        try 20        { 21            await _next(httpContext); //要么在中间件中处理要么被传递到下一个中间件中去 22        } 23        catch (Exception ex) 24        { 25            await HandleExceptionAsync(httpContext, ex); // 捕获异常了 在HandleExceptionAsync中处理 26        } 27    } 28    private async Task HandleExceptionAsync(HttpContext context, Exception exception) 29    { 30        context.Response.ContentType  application/json;  // 返回json 类型 31        var response  context.Response; 32 33        var errorResponse  new ErrorResponse 34        { 35            Success  false 36        };  // 自定义的异常错误信息类型 37        switch (exception) 38        { 39            case ApplicationException ex: 40                if (ex.Message.Contains(Invalid token)) 41                { 42                    response.StatusCode  (int) HttpStatusCode.Forbidden; 43                    errorResponse.Message  ex.Message; 44                    break; 45                } 46                response.StatusCode  (int) HttpStatusCode.BadRequest; 47                errorResponse.Message  ex.Message; 48                break; 49            case KeyNotFoundException ex: 50                response.StatusCode  (int) HttpStatusCode.NotFound; 51                errorResponse.Message  ex.Message; 52                break; 53            default: 54                response.StatusCode  (int) HttpStatusCode.InternalServerError; 55                errorResponse.Message  Internal Server errors. Check Logs!; 56                break; 57        } 58        _logger.LogError(exception.Message); 59        var result  JsonSerializer.Serialize(errorResponse); 60        await context.Response.WriteAsync(result); 61    } 62}这就是我们自定义的中间件在ExceptionHandlingMiddleware中我们首先通过依赖注入ILogger和RequestDelegate服务。委托类型_next用来处理上下文请求要么将上下文放在中间件中处理要么传递到下个中间链里的下一个中间件中去。如果我们的请求发生异常那么就会执行HandleExceptionAsync这个方法。这个方法里面会根据异常类型来返回不同的状态码并且记录到日志中去不需要返回给调用的客户端然后我们就可以通过检查日志来发现异常信息。我们在Program.cs中添加自定义异常1 app.UseMiddlewareExceptionHandlingMiddleware();接着我们修改下控制器里GetUsers()这个方法,去掉try-catch直接抛出异常1[HttpGet]2    public IActionResult GetUsers()3    {45      _logger.LogInformation(Get User Details);67           var result  _userService.GetUsers();8           if(result.Count0)9            throw new KeyNotFoundException(Get User failed); // 此处抛出一个KeyNotFoundException异常 10 11           return Ok(result); 12    }通过调试我们可以发现当发生异常的时候程序将会执行到HandleExceptionAsync()方法中去接着根据类型KeyNotFoundException 返回404的状态码和异常信息。如需理解中间件管道执行过程可参考上篇文章【C#/.NET】控制台上动态构建中间件管道
http://www.sadfv.cn/news/128931/

相关文章:

  • 专业的网站建设设计广州seo网站排名优化
  • 七冶建设集团网站 江苏东莞企石做网站
  • 深圳坪地网站建设 自助建站 五合一建站平台公司免费网站域名注册
  • 网站验收 流程wordpress小型论坛主题
  • dw个人网站建立教学wordpress图片像素
  • 太原市住房和城乡建设厅网站怎么在网站上做排名
  • 域名注册好如何做网站做网站不如做公众号
  • 兰州城建设计院网站网页设计代码如何写实训报告过程
  • 简单详细搭建网站教程图片下载网站哪个好
  • 建设团购网站怎么做网站在网上能搜到你
  • 做网站域名是什么意思竞价托管哪家专业
  • 浏阳网站开发做付费推广是网站好还是单页面好
  • 地方文明网站建设措施电子商务网站的建设方法
  • 网站织梦模板wordpress七牛
  • 太原做网站的公司wordpress多站点必备插件
  • 企业网站设计理念购物网站可行性分析报告
  • 广安住房和城乡建设厅网站在哪可以找到网站
  • 平湖模板网站建设公司网络营销是什么专业的课
  • 俄语在线网站建设柳市网站制作
  • 怎么构建网站河南平台网站建设设计
  • 广州商城型网站网站建设与制作外包服务
  • 幸福宝推广app网站入口烟台开发区建设业联合网站
  • 湖南建站网站婚恋公司销售好做吗
  • 个人网站制作流程平面设计师需要学历
  • 建筑公司网站设计模板湖州做网站公司
  • 网站做哪家最专业广州企业咨询服务费
  • 博州住房和城乡建设局网站北京赛车网站开发公司
  • 网站鼠标悬停动态效果建设官网的网站首页
  • 福田做网站公司怎么选择个人博客网站源码
  • 哪个网站做相册好河南省新闻出版学校