IT0012.深入浅出ASP.NET Core
https://flowus.cn/share/6a418ce7-27ea-4efd-adcf-c84a9ebe5ec9?code=Y0VP6G
【FlowUs 息流】IT0012.深入浅出ASP.NET Core(已看完)
梁桐铭著
2020年9月第一版北京第一次印刷
net core 3.1版本
目录:
第1章 编程语言和.NET的关系
第2章 .NET平台
第3章 .NET 5 的统一整合方案
第4章 创建 ASP.NET Core 项目
第5章 ASP.NET Core 项目启动流程
第6章 ASP.NET Core 中的配置文件
第7章 ASP.NET Core 中的中间件及其工作原理
第8章 ASP.NET Core 中的静态文件中间件
第9章 ASP.NET Core 开发人员异常页面
第10章 详解 ASP.NET Core MVC 设计模式
第11章 依赖注入与 Student 模型
第12章 从Controller 传递内容协商数据到 View
第13章 完善 MVC 框架内容
第14章 ASP.NET Core MVC 中的路由
第15章 ASP.NET Core 中的 TagHelper
第16章 ASP.NET Core 中的模型绑定与模型验证
第17章 EntityFramework Core 数据访问与仓储模式
第18章 学生头像上传与信息修改
第21章 从零开始学 ASP.NET Core Identity 框架
第22章 授权与验证的关系
第23章 角色管理与用户扩展
第24章 角色授权与用户管理
第25章 EF Core 中的数据完整性约束
第26章 ASP.NET Core 中的声明授权
第27章 RBAC 与 CBAC
第28章 Identity 的账户中心的设计
第29章 解析部分 ASP.NET Core Identity 源代码
第30章 架构
第31章 仓储框架的最佳实践
第32章 重构学生管理功能
第33章 课程列表与分级统计功能
第34章 复杂数据类型及自动依赖注入
第35章 课程与教师 CRUD
第36章 处理并发冲突
第37章 EF Core 中的继承与原生 SQL 语句使用
第38章 EF Core 中的数据加载与关系映射
第39章 ASP.NET Core 中的 Web API
第40章 实践多层架构体系
第41章 部署与发布
第42章 ASP.NET Core 2.2 到 ASP.NET Core 3.1 的迁移指南
第17章 EntityFramework Core数据访问与仓储模式
Infrastructure:基础设施
Microsoft.EntityFrameworkCore 3.1.0
Microsoft.EntityFrameworkCore.SqlServer 3.1.0
Microsoft.EntityFrameworkCore.Tools 3.1.0
AppDbContext类
public class AppDbContext:DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<Student> Students { get; set; } }Startup.cs中关键代码
services.AddDbContextPool<AppDbContext>(options => { options.UseSqlServer(Configuration.GetConnectionString("StudentDBConnection")); });程序包管理器控制台命令:
add-migration init
update-database
第19章 404错误与异常拦截
Startup.cs中关键代码
if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { //要测试的话记得改launchSettings.json里的环境为Production app.UseExceptionHandler("/Error");//处理exception的 //app.UseStatusCodePages(); // app.UseStatusCodePagesWithRedirects("/Error/{0}"); 地址变 app.UseStatusCodePagesWithReExecute("/Error/{0}"); //地址不变 }Error控制器
public class ErrorController : Controller { [Route("Error/{statusCode}")] public IActionResult HttpStatusCodeHandler(int statusCode) { var sss = HttpContext.Features.Get<IStatusCodeReExecuteFeature>(); switch (statusCode) { case 404: ViewBag.ErrorMessage = "sorry,您访问的页面不存在。"; ViewBag.Path = sss.OriginalPath; ViewBag.QS = sss.OriginalQueryString; break; default: break; } return View("NotFound"); } [Route("/Error")] public IActionResult Error() { var ex = HttpContext.Features.Get<IExceptionHandlerPathFeature>(); ViewBag.ExceptionPath = ex.Path; ViewBag.ExceptionMessage = ex.Error.Message; ViewBag.StackTrace = ex.Error.StackTrace; return View("Error"); } }Error.cshtml页面代码
<h1>应用程序出错!!!</h1> <h3>错误详情:</h3> <div class="alert alert-danger"> <h5>异常路径:</h5> <hr /> <p>@ViewBag.ExceptionPath</p> </div> <div class="alert alert-danger"> <h5>异常信息:</h5> <hr /> <p>@ViewBag.ExceptionMessage</p> </div> <div class="alert alert-danger"> <h5>异常堆栈跟踪:</h5> <hr /> <p>@ViewBag.StackTrace</p> </div>
第20章 ASP.NET Core中的日志记录
NUGET:NLog.Web.AspNetCore 4.9.0
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"> <targets> <target name="allfile" xsi:type="File" fileName="Logs/${shortdate}.log"></target> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="allfile"></logger> </rules> </nlog>Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging((hostingContext, logging) => { logging.AddNLog(); //加入nlog }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); //net7 中用 builder.Host.UseNLog();ErrorController.cs
private ILogger<ErrorController> logger; public ErrorController(ILogger<ErrorController> logger) { this.logger = logger; } [Route("/Error")] public IActionResult Error() { var ex = HttpContext.Features.Get<IExceptionHandlerPathFeature>(); ViewBag.ExceptionPath = ex.Path; ViewBag.ExceptionMessage = ex.Error.Message; ViewBag.StackTrace = ex.Error.StackTrace; logger.LogError($"异常路径:{ex.Path}\r\n异常信息:{ex.Error.Message}\r\n堆栈跟踪:{ex.Error.StackTrace}\r\n"); return View("Error"); }