已按固定格式整理完成,以下为 WordPress 可复制排版内容:
18-日志 logging的使用和Nlog的使用
asp.net core内置支持日志,当然开发人员也可以轻松切换为其他的日志框架。使用 dotnet run 命令 运行 查看日志控制台记录器。
日志级别:Warning、Info、Error、Debug、Trace。
安装nlog(这个不是内置的日志):
PM> install-package nlog.extensions.logging -preCode language: CSS (css)
正在还原 H:\Source\NLogDemo\NLogDemo\NLogDemo.csproj 的包…
使用内置的日志器 Microsoft.Extensions.Logging,就是使用微软的日志器。
关于 singlepage:就是不需要控制器 直接一个视图。
public class HomeController : Controller
{
private ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogDebug("LogDebug----");
_logger.LogWarning("LogWarning----");
_logger.LogError("LogError----");
_logger.LogInformation("LogInformation----");
_logger.LogTrace("LogTrace----");
_logger.LogCritical("LogCritical----");
return View();
}
}Code language: HTML, XML (xml)
输出里面 就会输出下面的日志:
NLogDemo2> Now listening on: http://localhost:28734
NLogDemo2> Application started. Press Ctrl+C to shut down.
NLogDemo2> info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
NLogDemo2> Request starting HTTP/1.1 GET http://localhost:19075/
NLogDemo2> warn: Microsoft.AspNetCore.Server.Kestrel[22]
NLogDemo2> Heartbeat took longer than "00:00:01" at "04/02/2018 15:37:54 +00:00".
NLogDemo2> info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
NLogDemo2> Executing action method NLogDemo2.Controllers.HomeController.Index (NLogDemo2) with arguments ((null)) - ModelState is Valid
NLogDemo2> dbug: NLogDemo2.Controllers.HomeController[0]
NLogDemo2> LogDebug----
NLogDemo2> warn: Microsoft.AspNetCore.Server.Kestrel[22]
NLogDemo2> Heartbeat took longer than "00:00:01" at "04/02/2018 15:37:59 +00:00".
NLogDemo2> warn: NLogDemo2.Controllers.HomeController[0]
NLogDemo2> LogWarning----
NLogDemo2> fail: NLogDemo2.Controllers.HomeController[0]
NLogDemo2> LogError----
NLogDemo2> info: NLogDemo2.Controllers.HomeController[0]
NLogDemo2> LogInformation----
NLogDemo2> crit: NLogDemo2.Controllers.HomeController[0]
NLogDemo2> LogCritical----Code language: JavaScript (javascript)
19-依赖注入DI以及它的好处
什么是依赖注入:一种实现对象及其合作者或者依赖项之间松散耦合的技术。以前我们在action中使用对象的时候 可能是通过new,现在我们不需要这样做了。我们可以交给其他某个地方帮我们new,我们只管使用这些对象。
依赖注入:以前我们调用其他类的时候
public IActionResult Index()
{
var tool = new EmailTool();
tool.Send("xxx");Code language: PHP (php)
本集代码:
namespace NLogDemo2.Cores
{
public interface ITool
{
void Send(string message);
}
}
namespace NLogDemo2.Cores
{
public class EmailTool: ITool
{
public void Send(string message)
{
Console.Write("发邮件:" + message);
}
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITool, EmailTool>();
services.AddMvc();
}Code language: HTML, XML (xml)
public class HomeController : Controller
{
private ITool _tool;
private ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger,ITool tool)
{
_tool = tool;
_logger = logger;
}
public IActionResult Index()
{
//以前需要new的
//var tool = new EmailTool();
//tool.Send("xxx");
_tool.Send("sdfdsfdsf");Code language: HTML, XML (xml)
依赖注入的方式的好处:以后我们要增加或者修改其他的发消息方式,我们可以不用管这个的homecontroller。因为我们使用了接口,接口目的就是为了解耦。比如我们加一个PhoneTool,那么我们只加就行了 并且实现这个Itool,然后我们只需要改变Startup的configureservice:
services.AddSingleton<ITool, PhoneTool>();Code language: HTML, XML (xml)
20-ASP.NET CORE关于Session 和session的配置
先来理一理session。引入 using Microsoft.AspNetCore.Http;
现在使用session 不像以前了:
//以前需要new的
//var tool = new EmailTool();
//tool.Send("xxx");
//HttpContext.Session["key"] = "value";
HttpContext.Session.SetString("key", "dd");Code language: JavaScript (javascript)
结果发现 报错:HttpContext.Session = 'HttpContext.Session' threw an exception of type 'System.InvalidOperationException'
我们需要先开启session服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITool, PhoneTool>();
services.AddSession();//加入session服务 这样 才能使用session
services.AddMvc();
}Code language: JavaScript (javascript)
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();//这里也需要配置session 需要在mvc之前Code language: JavaScript (javascript)
21-程序缓存Caching- Memory
目前.NET core提供三种缓存存储方式:Memory、Redis、Sqlserver。
同样 我们需要先安装包。缓存 是给所有人用的。
- 新建web应用 不适用认证
- 添加引用
Install-package Microsoft.Extensions.Caching.MemoryCode language: CSS (css)
- 在startup里面去添加服务:
Services.AddMemoryCache(); - 在控制器中使用 一样用到依赖注入
public class HomeController : Controller
{
private ITool _tool;
private ILogger<HomeController> _logger;
private IMemoryCache _memoryCache;
public HomeController(ILogger<HomeController> logger,ITool tool,IMemoryCache memoryCache)
{
_tool = tool;
_logger = logger;
_memoryCache = memoryCache;
}Code language: HTML, XML (xml)
Action中使用缓存memorycache,缓存也是键值对:
//使用memorycache
//一般我们的缓存使用方式 都是想判断缓存有没有 有则读取 没有则从原来地方获取 然后写入缓存
var cacheKey = "cacheKey";
string res = string.Empty;
if (!_memoryCache.TryGetValue(cacheKey,out res))//缓存里面又 则传入一个out 去里面获取缓存的值
{
res = DateTime.Now.ToString();//如果没有缓存则从其他地方获取 比如数据库 等等
_memoryCache.Set(cacheKey, res);//再重新把缓存写入缓存里面
}Code language: PHP (php)
还可以设置缓存的过期时间,包括绝对过期时间 和相对过期时间(相对过期时间 就是滑动过期)。还有移除缓存,缓存还有这个失效的回调函数。
NuGet 安装输出:
PM> Install-package Microsoft.Extensions.Caching.Memory
GET https://api.nuget.org/v3/registration3-gz-semver2/microsoft.extensions.caching.memory/index.json
OK https://api.nuget.org/v3/registration3-gz-semver2/microsoft.extensions.caching.memory/index.json 547 毫秒
正在还原 E:\FoxDevelop.com视频\137-ASP.NET CORE 视频教程\CachingDemo\CachingDemo\CachingDemo.csproj 的包...
正在安装 NuGet 程序包 Microsoft.Extensions.Caching.Memory 2.0.1。
正在提交还原...
将锁定文件写入磁盘。路径: E:\FoxDevelop.com视频\137-ASP.NET CORE 视频教程\CachingDemo\CachingDemo\obj\project.assets.json
E:\FoxDevelop.com视频\137-ASP.NET CORE 视频教程\CachingDemo\CachingDemo\CachingDemo.csproj 的还原在 476.59 ms 内完成。
执行 nuget 操作花费时间 2.16 sec
已用时间: 00:00:05.2860151
PM>Code language: JavaScript (javascript)
VS2017可以进行建议变量名 这个很不错。