.net core mvc 發布有很長時間了,但是一直沒有用過,最近突然想開發一個導航網站,于是就抽時間開發了一個專門為開發者使用的導航站點,想看的話請移步我的上一篇博客https://www.cnblogs.com/weiwin/p/11941684.html
這個網站雖然小但是網站該有的功能它都有,如果你想做一個小的網站,看這個帖子足夠了,下面全是代碼干貨,沒有廢話
1 登錄過濾器設定
新建一個類,繼承 ActionFilterAttribute重寫OnActionExecuting方法
public class LoginFilter :ActionFilterAttribute
{
public FilterLogin()
{
}
public override void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
//登錄邏輯
//----
//如果沒有登錄
context.Result = new StatusCodeResult(401);
}
}
//控制器里使用
[HttpPost]
[FilterLogin()]
public IActionResult GetUser()
{
}
坑:這里一定注意要設定context.Result不然還會繼續執行控制器里的方法
2 全域例外日志設定
nuget參考log4net
配置log4net.config檔案
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout" value="https://www.cnblogs.com/weiwin/p/%date [%thread] %-5level %logger - %message%newline" />
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="https://www.cnblogs.com/weiwin/p/logfile/" />
<appendToFile value="https://www.cnblogs.com/weiwin/p/true" />
<rollingStyle value="https://www.cnblogs.com/weiwin/p/Composite" />
<staticLogFileName value="https://www.cnblogs.com/weiwin/p/false" />
<datePattern value="https://www.cnblogs.com/weiwin/p/yyyyMMdd'.log'" />
<maxSizeRollBackups value="https://www.cnblogs.com/weiwin/p/10" />
<maximumFileSize value="https://www.cnblogs.com/weiwin/p/1MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="https://www.cnblogs.com/weiwin/p/%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="https://www.cnblogs.com/weiwin/p/ALL" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="FileAppender" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
在startup里添加代碼
public static ILoggerRepository repository { get; set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
repository=LogManager.CreateRepository("NETCoreRepository");
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options => { options.Filters.Add<FunClass.ErrorFilter>(); })
}
新建類ErrorFilter
public class ErrorFilter : IExceptionFilter
{
private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(HttpGlobalExceptionFilter));
public void OnException(ExceptionContext context)
{
log.Error(context.Exception);
}
}
3 快取IMemoryCache使用
在startup里添加代碼
services.AddMemoryCache();
在控制器里使用
private IMemoryCache _cache;
public HomeController(IMemoryCache cache)
{
_cache = cache;
}
4 session使用
在statup.cs里添加代碼
public void ConfigureServices(IServiceCollection services)
{
services.AddSession();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();
}
坑:這里必須在services.AddMvc()之后,
5 手動獲取DI物件
有時候我們需要手動獲取注入的物件,比如在過濾器里要使用快取可以這樣寫
IMemoryCache _cache = (IMemoryCache)context.HttpContext.RequestServices.GetService(typeof(IMemoryCache));
還有第二種方法
新建類ServiceLoader
public class ServiceLoader
{
public static IServiceProvider Instance { get; set; }
}
在startup.cs 添加代碼
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
ServiceLoader.Instance = app.ApplicationServices;
}
使用
(IMemoryCache)FunClass.ServiceLocator.Instance.GetService(typeof(IMemoryCache));
完結散花,
如果大家喜歡的話,別忘點了個站,下篇博客,我將把一個網站怎么從購買域名,備案,域名決議,發布部署.net core mvc站點的程序及遇到的坑講一遍,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/89769.html
標籤:.NET Core
下一篇:.Netcore Swagger - 解決外部庫導致的“Actions require an explicit HttpMethod binding for Swagger 2.0”
