IT0012.深入浅出ASP.NET Core(已看完)

IT0012.深入浅出ASP.NET Core

[IT0012.深入浅出ASP.NET Core(已看完)](https://flowus.cn/6a418ce7-27ea-4efd-adcf-c84a9ebe5ec9)


梁桐铭著

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章 学生头像上传与信息修改

第19章 404 错误页与异常拦截

第20章 ASP.NET Core中的日志记录

第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");

        }