首页 > 编程语言 >Asp.Net Core实战(干货)

Asp.Net Core实战(干货)

时间:2023-11-07 09:23:29浏览次数:37  
标签:Core Code 配置 Startup Asp Net 日志 View

序言

使用.NET Core,团队可以更容易专注的在.net core上工作。比如核心类库(如System.Collections)的更改仍然需要与.NET Framework相同的活力,但是ASP.NET Core或Entity Framework Core可以更轻松地进行实质性更改,而不受向后兼容性的限制。.NET Core借鉴了.NET Framework的最佳实践,并将软件工程的最新进展结合在一起。

寒暄、扯淡已经完毕,,,下面是我最近时间对.Net Core整理的相关知识,觉得这些在项目中是最基础且最会应用到的,,,,不喜欢扯理论,直接撸码:

1、浅谈Startup类

2、自定义路由

3、跨域设置

4、自定义读取配置文件信息

5、程序集批量依赖注入

6、使用NLog写入文件日志

7、使用NLog写入数据库日志

8、Nlog标签解读

9、启用Session

10、json数据,自定义日期格式

11、json数据,string类型字段返回为null时默认返回空字符串

12、Json数据,返回字段同实体字段大小写一致

一、浅谈Startup类

在ASP.NET Core应用程序中,使用一个按约定Startup命名的类Startup,在Program.cs中使用WebHostBuilderExtensions UseStartup <TStartup>方法指定类,但通常使用系统默认的startup,可以通过startup的构造函数进行依赖注入,startup类中必须包含Configure方法同时可以根据实际情况添加ConfigureServices方法,这两个方法均在应用程序运行时被调用。Startup 类的 执行顺序:构造 -> configureServices ->configure

ConfigureServices方法:主要用于服务配置,比如依赖注入(DI)的配置,使用时该方法必须在Configure方法之前

Configure方法:用于应用程序响应HTTP请求,通过向IApplicationBuilder实例添加中间件组件来配置请求管道

二、自定义路由

在Startup类的Configure方法配置

 View Code

三、跨域设置

在Startup类的ConfigureServices方法配置

 View Code

其中“AppDomain”这个名字是自定义的,大家可以根据自己的喜好定义不同的名字,配置完成之后,在控制器上面添加[EnableCors("AppDomain")]特性即可,如果要实现全局的跨域设置,可以在Configure方法里面配置app.UseCors("AppDomain"),即能实现全局的跨域设置

四、自定义读取配置文件信息

 这里是写的一个公共方法去读取配置文件appsettings.json

 View Code  View Code  View Code

截图看效果

五、程序集批量依赖注入

我们都知道依赖注入主要是为了方便解耦,解除应用程序之间的依赖关系,在我看来DI、IOC这两者差不多是一样的,DI是从应用程序的角度而IOC是从容器的角度,它们主要是对同一件事情的不同角度的描述。然而,,,,,,当我们项目业务比较多的时候,如果要实现多个业务的注入,通常方法是手动一个个的添加注入,这样可能有点太繁琐,所以就想到了利用反射实现批量注入,,,,,,

方法一

帮助类

 View Code  View Code

 在Startupl类的ConfigureServices方法中添加

 View Code

调用(Ps:Core.BLL这个类库里面分别有一个接口IAccountService和一个类AccountService,AccountService类去继承接口IAccountService并实现接口里面的方法)

 View Code  View Code

 

方法二

 View Code  View Code

 

六、使用NLog写入文件日志

新建配置文件命名为Nlog.config

 View Code

在Startup类Configure方法中添加配置

 View Code

写入日志到文件

 View Code

七、使用NLog写入数据库日志

添加依赖项:Microsoft.Extensions.Logging和NLog.Extensions.Logging

新建配置文件命名为Nlog.config

 View Code

同第六项代码一样,也是在Configure方法设置,写入日志到数据库

 View Code  View Code

八、Nlog标签解读

NLog的使用方式基本上和其它的Log库差不多,用于输出日志的级别包括:Trace,Debug,Info,Warn,Error,Fatal

<nlog>标签 autoReload 修改配置文件后是否允许自动加载无须重启程序 throwExceptions 内部日志系统抛出异常 internalLogLevel 可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭 internalLogFile 把内部的调试和异常信息都写入指定文件里 建议throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃。 <targets>标签 <target />区域定义了日志的目标或者说输出 ,,在这里可以按需设置文件名称和格式,输出方式。 name:自定义该target的名字,可供rule规则里使用 type: 定义类型,官方提供的可选类型有: Chainsaw|ColoredConsole |Console |Database|Debug|Debugger|EventLog|File|LogReceiverService|Mail|Memory|MethodCall|Network |NLogViewer|Null |OutputDebugString|PerfCounter|Trace|WebService 不过常用的还是 File \Database \Colored Console\ Mail

layouts 用来规定布局样式,语法“${属性}”,可以把上下文信息插入到日志中,更多布局渲染器可参考https://github.com/nlog/NLog/wiki/Layout%20Renderers

<rules>标签

各种规则配置在logger里 name - 记录者的名字 minlevel - 最低级别 maxlevel - 最高级别 level - 单一日志级别 levels - 一系列日志级别,由逗号分隔。 writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。   九、启用Session Net Core默认情况下是没有启用Session的,需要在Startup文件ConfigureServices方法配置启动,否则无法使用(需要在UseMvc之前,否则会报错)  View Code

 十、json数据,自定义日期格式

在webapi数据返回中,经常碰到json数据日期带“T”的问题,可以在Startup类ConfigureServices方法中做如下全局配置

 View Code

十一、json数据,string类型字段返回为null时默认返回空字符串

帮助类

 View Code

在Startup类ConfigureServices方法中做如下全局配置

 View Code

api后台代码

 View Code

配置前和配置之后数据在浏览器中返回效果截图

 

大家看效果图有没有发现一个问题,我在没有配置时,实体里面的“UserName”字段默认被转换成了小写,这显然不符合我们的要求,当我配置之后就可以返回同实体里面的字段大小写格式一致了,同时为null的字段默认返回了空字符串,是不是美滋滋,,,,

可能有朋友会说,我只想让返回的数据字段同实体的数据字段一致,而字段为null的值依然还是让他返回null,其实这样也可以,看第十二项配置操作即可。

十二、Json数据,返回字段同实体字段大小写一致 在.net core中,webapi返回的数据字段,首字母默认被转换成了小写,在Startup类ConfigureServices方法中配置:   View Code  View Code

配置前和配置之后数据在浏览器中返回效果截图

                  目前只整理了这些,后续会持续更新到这里面,如有不合理的地方,请大家加以斧正,,,希望能和大家共同学习、共同进步,,

 

 

权责申明

作者:SportSky 出处: http://www.cnblogs.com/sportsky/

标签:Core,Code,配置,Startup,Asp,Net,日志,View
From: https://www.cnblogs.com/djd66/p/17814278.html

相关文章

  • .Net Core AOP之AuthorizeAttribute
    一、简介在.netcore中Filter分为以下六大类:1、AuthorizeAttribute(权限验证)2、IResourceFilter(资源缓存)3、IActionFilter(执行方法前后的记录)4、IResultFilter(结果生成前后扩展)5、IAlwaysRun(响应结果的补充)6、IExceptionFilter(异常处理)二、AuthorizeAttribute(权限验证)......
  • .Net Core之JWT授权
    一、什么是JWT文章参考:https://www.leo96.com/article/detail/55JSONWeb令牌(JWT)是一个开放标准(RFC7519),它定义 了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为JSON对象。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或EC......
  • .NET(C#) Linq Concat和Union以及Select和SelectMany的使用及区别
    1、Concat操作符Concat操作符用于连接两个序列,生成一个新序列。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApplication{classProgram{staticvoidMain(s......
  • .NET C# 9.0 record和with的定义及使用
    C#9引入record,它一种可以创建的新引用类型,而不是类或结构。C#10添加了recordstructs,以便可以将记录定义为值类型。记录与类不同,区别在于record类型使用基于值的相等性。两个记录类型的变量在它们的类型和值都相同时,它们是相等的。with表达式在C#9.0及更高版本中可用,......
  • .NET(C#) LinkedList、Queue<T>和Stack<T>的使用
    本文主要介绍.NET(C#)中,LinkedList链表、Queue<T>队列和Stack<T>堆栈的使用,以及相关的示例代码。1、LinkedList(链表)链表中元素存储内存中是不连续分配,每个元素都有记录前后节点,节点值可以重复,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方......
  • .NET(C#) Linq GroupBy和GroupJoin的使用
    Linq是LanguageIntegratedQuery的简称,它是微软在.NETFramework3.5里面新加入的特性,用以简化查询查询操作。本文主要介绍.NET(C#)中Linq的GroupBy和GroupJoin操作符1、GroupBy操作符GroupBy操作符类似于SQL语言仲的GruopBy语句,这里的GroupBy操作符用于将输入序列中的元素进......
  • .NET(C#) Cast和OfType的使用
    Linq是LanguageIntegratedQuery的简称,它是微软在.NETFramework3.5里面新加入的特性,用以简化查询查询操作。本文主要介绍.NET(C#)中Linq的Cast和OfType操作符。1、Cast操作符Cast操作符用于将一个类型为IEnumerable的集合对象转换为IEnumerable<T>类型的集合对象。也就是非......
  • .NET(C#) Linq Range和Repeat的使用
    Linq是LanguageIntegratedQuery的简称,它是微软在.NETFramework3.5里面新加入的特性,用以简化查询查询操作。本文主要介绍.NET(C#)中Linq的Range和Repeat操作符。1、Range操作符Range操作符用于辅助生成一个整数序列。usingSystem;usingSystem.Collections.Generic;usi......
  • .NET(C#) 对象的拷贝(浅拷贝和深拷贝)
    本文主要介绍.NET(C#),对象的拷贝,包括浅拷贝和深拷贝,以及浅拷贝和深拷贝的实现方式,不同的实现方式之间的性能对比。1、浅拷贝和深拷贝浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值......
  • NET(C#) Linq Take和TakeWhile的使用
    Linq是LanguageIntegratedQuery的简称,它是微软在.NETFramework3.5里面新加入的特性,用以简化查询查询操作。本文主要介绍.NET(C#)中Linq的Take和TakeWhile操作符。1、Take操作符Take操作符用于从输入序列中返回指定数量的元素,常用于分页。usingSystem;usingSystem.Coll......