这种机密文件的配置方式只适用于开发环境,让密码配置脱离源代码管理器。生产环境中我们则需要 生产机密Microsoft Azure 密钥保管库配置
密钥保管库暂时没有进行研究,留到后面研究清楚之后会单独写一篇文章
服务器 URL可通过 UseUrls函数设置url
或者通过配置文件配置 hostting.json文件内容:
{
urls: "*:5005"
}
配置启用方式
public static IWebHost BuildWebHost(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json", optional: true) .AddCommandLine(args) .Build(); return WebHost.CreateDefaultBuilder(args) .UseUrls("http://*:5000;*:5001;") .UseConfiguration(config) .UseStartup<Startup>() .Build(); }若无hostting.json配置,以上代码将会监听两个端口:5000 5001
若存在配置则会用5005端口
参考链接:
过滤器.net Core中过滤器的用法没有太大的改变,注册全局过滤器的方式有所不同:
services.AddMvc(options=> { options.Filters.Add(typeof(SampleActionFilterAttribute)); });过滤器和.net core的中间件似乎很是相似,但是相比之下,过滤器可以处理到更细节的地方,相比中间件更加灵活
日志之前一直用Log4net来记录日志,.net core2.0默认提供的日志记录方式并不能满足生产环境的要求,所以研究了下log4net在.net core中的用法:
引用最新版的nuget包
增加配置文件log4net.config
使用代码如下:
log4net.Repository.ILoggerRepository repository = log4net.LogManager.CreateRepository("NETCoreRepository"); var fileInfo = new FileInfo("log4net.config"); log4net.Config.XmlConfigurator.Configure(repository, fileInfo); log4net.Config.BasicConfigurator.Configure(repository); log4net.ILog log = log4net.LogManager.GetLogger(Startup.Repository.Name, MethodBase.GetCurrentMethod().DeclaringType);repository的位置可以放在startup当中,避免每次都实例化
同时研究了下官方推荐的一个第三方日志记录提供程序Nlog:
Nlog在.net core的详细使用说明可参考官网:https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2
我这里就直接贴代码了:
首先需要引用最新的nuget包:NLog.Web.AspNetCore NLog.Extensions.Logging
配置文件nlog.config:
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Debug" internalLogFile="internal-nlog.txt"> <!--define various log targets--> <targets> <!--保存至文件--> <target xsi:type="File" fileName="../../../NLogs/${shortdate}_${level:uppercase=false:padding=-5}.log" layout="${longdate} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" /> </targets> <rules> <logger level="Info" writeTo="log_file" /> <logger levels="Error" writeTo="log_file" /> <logger levels="Debug" writeTo="log_file" /> <logger level="Fatal" writeTo="log_file" /> <logger level="Warn" writeTo="log_file" /> </rules> </nlog>startup:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddNLog(); app.AddNLogWeb(); env.ConfigureNLog("nlog.config"); }controller:
private NLog.Logger nLogger = NLog.LogManager.GetCurrentClassLogger(); private readonly ILogger<HomeController> nLogger2; public HomeController(IOptions<AppSettionsOptions> set, ILogger<HomeController> logger2) { nLogger2 = logger2; } public IActionResult Index() { nLogger.Info("nloginfo"); nLogger.Error("nlogerror", new Exception("自定义异常")); nLogger2.LogInformation("nloginfo2"); nLogger2.LogError("nlogerror2", new Exception("自定义异常")); return View(); }上面展示了两种logger的调用方式
值得注意的是通过构造函数注入的logger对象会优先选择appsettings.json中的配置
更要注意的是appsetting取的是配置的环境变量所对应的appsettings.{Environment}.json。(之前调试过程中我将环境变量改了,结果在测试日志输出时发现appsettings怎么设置都没用...)
IOC.net Core 内置了一套默认的依赖注入实现,但并不是太好用
官网提供了一个Autofac的简单示例,之前对Antofac也只是初步了解了一下,没有深入使用