iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.NET6一些常用组件的配置及使用
  • 519
分享到

.NET6一些常用组件的配置及使用

2024-04-02 19:04:59 519人浏览 薄情痞子
摘要

软件架构 分为模型层,服务层,接口层来做测试使用 0.如何使用IConfiguration、Environment 直接在builder后的主机中使用。 builder.Conf

软件架构

分为模型层,服务层,接口层来做测试使用

0.如何使用IConfiguration、Environment

直接在builder后的主机中使用。


builder.Configuration;
builder.Environment

1.如何使用swagger

.NET 6 自带模板已经默认添加Swagger,直接使用即可。


builder.Services.AddSwaggerGen();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

2. 如何添加EFCore到.net 6中

按照EFCore常规使用方法,申明表的Entity及Dbcontext后,在program.cs文件中添加


builder.Services.ADDDbContext<Service.DataContext>(opt => {
    opt.UsesqlServer(builder.Configuration.GetConnectionString("Default"));
});

即可在其他地方注入使用 DataContext

使用Sqlite数据库,需要引用 Microsoft.EntityFrameworkCore.Sqlite,并在添加服务时,改为


opt.UseSqlite(builder.Configuration.GetConnectionString("Default"));

包管理控制台数据库结构生成方法:

  • 使用 add-migration 创建迁移
  • 使用 update-database 更新数据结构

3.如何注入一个服务


builder.Services.AddScoped<UserIdentyService>();

4.如何定义全局的using引用

在根目录下新建一个 cs文件,比如Globalusing.cs,在里面添加你的全局引用,和常规引用不同的是,在using前面添加 global


global using Service;
global using Entity;
global using Entity.Dto;

5.如何使用Autofac

添加 Nuget 引用


Autofac.Extensions.DependencyInjection

program.cs文件添加autofac的使用和注入配置


builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
 {
     Assembly assembly = Assembly.Load("Service.dll");
     builder.ReGISterAssemblyTypes(assembly)
            //.AsImplementedInterfaces()// 无接口的注入方式
            .InstancePerDependency();
 });

此时即可构造函数注入使用。

6.如何使用Log4Net

添加引用


Microsoft.Extensions.Logging.Log4Net.Aspnetcore

新建配置文件 log4net.config;

添加service配置


//注入Log4Net
builder.Services.AddLogging(cfg =>
{
    //默认的配置文件路径是在根目录,且文件名为log4net.config
    //cfg.AddLog4Net();
    //如果文件路径或名称有变化,需要重新设置其路径或名称
    //比如在项目根目录下创建一个名为config的文件夹,将log4net.config文件移入其中,并改名为log4net.config
    //则需要使用下面的代码来进行配置
    cfg.AddLog4Net(new Log4NetProviderOptions()
    {
        Log4NetConfigFileName = "config/log4net.config",
        Watch = true
    });
});

即可在需要的地方定义使用


_logger = LogManager.GetLogger(typeof(UserController));

7.如何使用全局异常过滤器

首先新建 GlobalExceptionFilter 全局异常过滤器,继承于 ExceptionFilter ,用于接收处理抛出的异常


public class GlobalExceptionFilter : IExceptionFilter
{
    readonly IWEBHostEnvironment hostEnvironment;
    readonly ILog logger;
    public GlobalExceptionFilter(IWebHostEnvironment _hostEnvironment)
    {
        this.hostEnvironment = _hostEnvironment;
        this.logger = LogManager.GetLogger(typeof(GlobalExceptionFilter));
    }
    public void OnException(ExceptionContext context)
    {
        if (!context.ExceptionHandled)//如果异常没有处理
        {
            var result = new apiResult
            {
                Code = 500,
                IsSuccess = false,
                Message = "服务器发生未处理的异常"
            };

            if (hostEnvironment.IsDevelopment())
            {
                result.Message += "," + context.Exception.Message;
                result.Data = context.Exception.StackTrace;
            }

            logger.Error(result);

            context.Result = new JSONResult(result);
            context.ExceptionHandled = true;//异常已处理
        }
    }
}

然后在Service中添加全局异常过滤器


builder.Services.AddControllers(option =>
    {
        option.Filters.Add<GlobalExceptionFilter>();
    }
);

添加控制器方法完成测试


[HttpGet("exception")]
public ApiResult ExceptionAction()
{
    throw new NotImplementedException();
}

8.如何使用Redis缓存

使用 StackExchange.Redis 作为缓存组件(其他组件类似的使用方式)。nuget 安装 StackExchange.Redis.Extensions.Core

首先,先建立一个类 RedisClient ,用于管理redis的连接和操作,再建立一个 RedisClientFactory 类,用于创建 redis的连接;


public class RedisClient{...}
public class RedisClientFactory{...}

appsettings.json 中添加redis的配置


"RedisConfig": {
    "Redis_Default": {
      "Connection": "127.0.0.1:6379",
      "InstanceName": "Redis1:"
    },
    "Redis_6": {
      "Connection": "127.0.0.1:6379",
      "DefaultDatabase": 6,
      "InstanceName": "Redis2:"
    }
  }

service中添加 redis客户端的引用


//添加redis的使用
builder.Services.AddSingleton<RedisClient>(_=> RedisClientFactory.GetInstance(builder.Configuration));

一顿操作后,就可以在你想要使用redis的地方引用了


RedisClient redisClient
...
this.redisDb = redisClient.GetDatabase("Redis_Default");
redisDb.StringSet("clientId", "clientId", TimeSpan.FromSeconds(10));

要使用redis做分布式缓存,先引用 Microsoft.Extensions.Caching.StackExchangeRedis


//将Redis分布式缓存服务添加到服务中
builder.Services.AddStackExchangeRedisCache(options =>
    {
        //用于连接Redis的配置  Configuration.GetConnectionString("RedisConnectionString")读取配置信息的串
        options.Configuration = "Redis_6";// Configuration.GetConnectionString("RedisConnectionString");
        //Redis实例名RedisDistributedCache
        options.InstanceName = "RedisDistributedCache";
    });

引用自 "分布式 Redis 缓存"

9 如何添加使用定时任务组件

此处使用 Hangfire 定时任务组件,轻便,可持久化,还有面板。

引用 Hangfire 后,即可新增定时任务。


//启用Hangfire服务.
builder.Services.AddHangfire(x => x.UseStorage(new MemoryStorage()));
builder.Services.AddHangfireServer();

...

//启用Hangfire面板
app.UseHangfireDashboard();
//开启一个定时任务
RecurringJob.AddOrUpdate("test",() => Console.WriteLine("Recurring!"), Cron.Minutely());

访问 https://localhost:7219/hangfire 即可看到任务面板

10. 如何使用业务锁住下单或者支付操作

首先,做这个事需要能先构建出一个锁出来,这个锁有个锁的标识key,可以根据这个key判定key对应的锁是否存在,这样的话,在某个用户支付或者下单减库存啥的时候,就可以按照这个key先上锁,后面有用户走其他渠道进行同样的操作的时候,就可以根据是否上锁了,来判断操作能否继续。

比如一个支付订单的业务,可以在手机上操作,也可以在电脑上操作,这个时候就可以给支付接口上锁,只要一个支付过程存在着,并且没有超时,那就不能在其他渠道进行操作。

我们上面已经使用了redis,下面就用redis构建个锁来模拟这个操作,具体看代码:


/// <summary>
    /// 测试业务锁
    /// </summary>
    /// <returns></returns>
    [HttpGet("lockhandle")]
    public async Task<ApiResult> LockHandle(int userId)
    {
        var key = "user";
        var token = $"ID:{userId}";
        try
        {
            if (redisDb.LockTake(key, token, TimeSpan.FromSeconds(50)))
            {
                await Task.Delay(30 * 1000);
                return await Task.FromResult(ApiResult.Success($"ID:{userId} 获取到锁了,操作正常,connectId:{Request.HttpContext.Connection.Id}"));
            }
            else
            {
                return await Task.FromResult(ApiResult.Fail($"有正在操作的锁,connectId:{Request.HttpContext.Connection.Id}"));
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            redisDb.LockRelease(key, token);
        }
    }

11. 如何配置跨域

此处主要记录全局跨域,不包括指定api跨域。先增加一个配置 "Cors": "http:127.0.0.1:5001",配置可以跨域的url,也可以使用默认跨域配置。
host配置以下服务,按需使用:


builder.Services.AddCors(delegate (CorsOptions options)
{
    options.AddPolicy("CorsPolicy", delegate (CorsPolicyBuilder corsBuilder)
    {
        //指定url跨域
        corsBuilder.WithOrigins(builder.Configuration.GetValue<string>("Cors").Split(','));
        //默认跨域
        corsBuilder.SetIsOriginAllowed((string _) => true).AllowAnyMethod().AllowAnyHeader()
            .AllowCredentials();
    });
});

12. 如何使用NewtonsoftJson

.NET6 默认的系列化库是内置的 System.Text.Json,使用中如果有诸多不熟悉的地方,那肯定是想换回 NewtonsoftJson,需要nuget 引用 Microsoft.AspNetCore.mvc.NewtonsoftJson 来配置使用,常用配置包括日期格式、大小写规则、循环引用配置。。。等,下面是一个配置


builder.Services.AddControllers(option =>
    {
        option.Filters.Add<GlobalExceptionFilter>();
    }
).AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //序列化时key为驼峰样式
    options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
    options.SerializerSettings.DateFORMatString = "yyyy-MM-dd HH:mm:ss";
    options.SerializerSettings.ReferenceLoopHandling =  ReferenceLoopHandling.Ignore;//忽略循环引用
});

13. 如何使用SignalR

首先添加一个 ChatHub 作为 交互中心处理器


public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }

在主机中使用服务


builder.Services.AddSignalR();
...
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ChatHub>("/chatHub");
});

到此这篇关于.NET6一些常用组件的配置及使用的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: .NET6一些常用组件的配置及使用

本文链接: https://www.lsjlt.com/news/160436.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .NET6一些常用组件的配置及使用
    软件架构 分为模型层,服务层,接口层来做测试使用 0.如何使用IConfiguration、Environment 直接在builder后的主机中使用。 builder.Conf...
    99+
    2024-04-02
  • Nginx的一些常用配置汇总
    目录Nginx配置文件结构Nginx日志切割root 与 alias使用GZIP压缩提升请求效率location匹配规则解析使用SwitchHosts模拟本地域名解析Nginx跨域配...
    99+
    2024-04-02
  • .NET6在WebApi中使用日志组件log4net
    目录1、安装依赖2、配置文件3、注册组件4、使用1、安装依赖 Microsoft.Extensions.Logging.Log4Net.AspNetCore 2、配置文件 <...
    99+
    2024-04-02
  • 使用@Value值注入及配置文件组件扫描
    @Value值注入及配置文件组件扫描 spring配置文件对应的是父容器,springMVC配置文件产生的是子容器,前者一般配置数据源,事务,注解等,当然还可以进一步将一些配置细化到...
    99+
    2024-04-02
  • React-Native中一些常用组件的用法详解(一)
    前言本文为大家介绍一下React-Native中一些常用的组件,由于对ES6的语法并没有完全掌握,这里暂时用ES5和ES6混用的语法。View组件View是一个支持Flexbox布局、样式、一些触摸处理、和一些无障碍功能的容器,并且它可以放...
    99+
    2023-05-31
    react-native 常用组件 用法
  • HP cluster的硬件配置及使用
    双机备份原理:在2个主机节点上分别安装集群软件(如:HP ServiceGuard),对客户端配置一个浮动IP,浮动意思是该IP地址适时绑定在2个节点中的某一个上,但该IP对客户端是固定的。每个节点配置3块网卡,分别是数据网卡,心跳信号网卡...
    99+
    2023-06-06
  • .net6 使用Senparc开发小程序配置过程
    目录1.添加引用2.添加配置文件3.在appsetting.jso里面配置参数4.配置program1.添加引用 2.添加配置文件 /// <summary> ...
    99+
    2024-04-02
  • 如何使用PyCharm及常用配置详解
    目录一、Python 的 IDE —— PyCharm1.1 集成开发环境(IDE)1.2 PyCharm 介绍二、PyCharm上手使用2.1 创建Python项目2.2 新建Py...
    99+
    2024-04-02
  • .NET6在WebApi中如何使用日志组件log4net
    这篇文章主要介绍.NET6在WebApi中如何使用日志组件log4net,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、安装依赖Microsoft.Extensions.Logging.Log4Net.AspNet...
    99+
    2023-06-22
  • DHCP常用配置文件有哪些
    这篇文章主要介绍DHCP常用配置文件有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!DHCP动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客...
    99+
    2023-06-27
  • .NET6 ConfigurationManager的实现及使用方式
    前言 友情提示:建议阅读本文之前先了解下.Net Core配置体系相关,也可以参考本人之前的文章《.Net Core Configuration源码探究 》然后对.Net Core的...
    99+
    2024-04-02
  • 如何使用@Value值注入及配置文件组件扫描
    本篇内容介绍了“如何使用@Value值注入及配置文件组件扫描”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!@Value值注入及配置文件组件扫...
    99+
    2023-06-20
  • CentOS下Pureftp的配置文件有哪些常用配置项
    这篇文章主要介绍“CentOS下Pureftp的配置文件有哪些常用配置项”,在日常操作中,相信很多人在CentOS下Pureftp的配置文件有哪些常用配置项问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Cen...
    99+
    2023-06-10
  • SpringCloud Bus组件的使用配置详解
    目录什么是Bus搭建RabbitMQ服务实现自动配置刷新指定服务刷新配置集成webhook实现自动刷新什么是Bus 0.解释 https://spring.io/projects/s...
    99+
    2024-04-02
  • SpringCloud:Feign的使用及配置
    目录 Feign的使用及配置 1、Feign替代RestTemplate 2、使用Fegin步骤 3、自定义配置 4、Feign使用优化 5、Feign的最佳实践方式 Feign的使用及配置 1、Feign替代RestTemplate...
    99+
    2023-09-18
    spring cloud java spring boot
  • Apache介绍及常用配置
    Apache是一款开源的Web服务器软件,也是目前世界上使用最广泛的Web服务器软件之一。它能够处理静态文件和动态内容,并且支持多种...
    99+
    2023-09-21
    Apache
  • VSCode有哪些常用插件和配置
    这篇“VSCode有哪些常用插件和配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“VSCode有哪些常用插件和配置”文章吧...
    99+
    2023-06-29
  • vant3中使用List组件的一些坑
    目录使用vant3 List 组件过程中遇到的一些坑处理vant list使用报错的点总结使用vant3 List 组件过程中遇到的一些坑 1、接口错误的时候,大量重复请求。 可能接...
    99+
    2023-01-18
    vant3 List组件 vant3使用List组件 使用List组件的坑
  • VSCode常用插件和好用配置有哪些
    这篇文章主要介绍了VSCode常用插件和好用配置有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇VSCode常用插件和好用配置有哪些文章都会有所收获,下面我们一起来看看吧。一、VSCode常用插件推荐工欲善...
    99+
    2023-07-04
  • 详解在vue3中使用jsx的配置以及一些小问题
    目录配置模版语法v-if/v-show配置 在vue3中使用jsx十分方便,只需要安装官方的@vitejs/plugin-vue-jsx插件,在vite.config.ts中配置 /...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作