Asp.Net和Asp.NetCore的区别
1.全家桶 VS 2.自选式
1.asp.net技术全家桶–无所不能,需要的都有,不需要的也有–因为开发者多–省心但是也糟心,会造成系统性能不佳
2.asp.net core技术自选式–要啥配置啥–只有一个最最简约的设置–pay for what you use–麻烦点(能够更好的深入下,能够让开发者更好的去理解框架的运作)–高效
asp.net core简约,但并不简单在大幅简化框架的包袱的同时,ASP.NetCore又内置了一些新东西,这是框架设计思想的进步。比如IOC,在.net framework里面是没有内置IOC ,但是在asp.net core里面是有的
几种套路
套路1–各种扩展方法 (静态类,静态方法,this属性),例如SessionExtensions就是一个扩展方法,ISession是一个接口,
里面没有GetString,SetString方法,最小化抽象设计,通过扩展方法完成易用性扩展
套路2–添加中间件和服务实例(中间件是组成应用程序管道来处理请求响应的组件,管道内的所有组件,都可以是否将请求转给下一个组件并在管道中调用下一个组件之前和之后,执行某些操作。请求委托被用来建立请求管道,请求委托处理每一个HTTP请求)
套路3–内置日志及扩展(两种方式:1.Program,引入第三方控件log4net.AspNetCore 1.0.0,安装好后,找到Program.cs文件,找到一个叫做
CreateHostBuilder的方法2:Startup)
套路4:内置IOC
SessionExtensions源码
public static class SessionExtensions
{
public static byte[] Get(this ISession session, string key);
public static int? GetInt32(this ISession session, string key);
public static string GetString(this ISession session, string key);
public static void SetInt32(this ISession session, string key, int value);
public static void SetString(this ISession session, string key, string value);
}
添加Session中间件
在Asp.NetCore里面是没有Session中间件的,需要自己去添加
public void ConfigureServices(IServiceCollection services)
{
//IServiceCollection叫做服务的实例
services.AddSession();//使用session的相关实例(该怎么用session)
services.AddControllersWithViews();
}
Configure里面use
app.UseSession();//表示请求需要使用session
内置日志及扩展
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)//创建默认builder一会完成各种配置
.ConfigureLogging((context,loggingBuilder)=>
{
//日志已经内置,因此这里只是扩展了一些方法,不需要使用ADD,USE等
loggingBuilder.AddFilter(“System”, LogLevel.Warning);//过滤掉命名空间,Filter过滤器,如果日志里面以这个字符串开头的则直接过滤,不记
loggingBuilder.AddFilter(“Microsoft”,LogLevel.Warning);//
//Microsoft.Extensions.Logging.Log4Net.AspNetCore
//log4net.AspNetCore
loggingBuilder.AddLog4Net();//使用log4net
})
.ConfigureWebHostDefaults(webBuilder =>//指定一个web服务器–Kestel
{
webBuilder.UseStartup();//就是跟MVC流串起来
});
log4net.config配置文件
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<!-- Define some output appenders -->
<appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
<file value="Errorlog\\log.txt" />
<!--追加日志内容-->
<appendToFile value="true" />
<!--防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--可以为:Once|Size|Date|Composite-->
<!--Composite为Size和Date的组合-->
<rollingStyle value="Composite" />
<!--当备份文件时,为文件名加的后缀,这里可以作为每一天的日志分别存储不同的文件-->
<datePattern value="yyyyMMdd.txt" />
<StaticLogFileName value="false"/>
<!--日志最大个数,都是最新的-->
<!--rollingStyle节点为Size时,只能有value个日志-->
<!--rollingStyle节点为Composite时,每天有value个日志-->
<maxSizeRollBackups value="20" />
<!--可用的单位:KB|MB|GB-->
<maximumFileSize value="3MB" />
<!--置为true,当前最新日志文件名永远为file节中的名字-->
<staticLogFileName value="true" />
<!--输出级别在INFO和ERROR之间的日志-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ALL" />
<param name="LevelMax" value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<!--日志输出格式:时间 日志类型 日志内容-->
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
</layout>
</appender>
<!-- levels: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL -->
<root>
<priority value="ALL"/>
<level value="ALL"/>
<appender-ref ref="rollingAppender" />
</root>
</log4net>