将空 Web 项目配置为 MVC 项目

打开 Startup.cs 修改代码为:

  1. public class Startup
  2. {
  3. public void ConfigureServices(IServiceCollection services)
  4. {
  5. services.AddMvc();
  6. services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
  7. .AddCookie(option => {
  8. option.LoginPath = "/User/LogIn";
  9. option.AccessDeniedPath = "/Error/AccessDenied";
  10. option.Cookie.SecurePolicy = CookieSecurePolicy.Always;
  11. });
  12. }
  13. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  14. {
  15. app.UseExceptionHandler("/Error/Index");
  16. app.UseStaticFiles();
  17. app.UseAuthentication();
  18. app.UseMvcWithDefaultRoute();
  19. }
  20. }
  • 加载并启用 MVC 组件

    • 默认路由是 {controller=Home}/{action=Index}/{id?}
  • 加载并启用身份验证组件

  • 允许使用静态文件,且根目录为 wwwroot

  • 启用 Cookie 身份验证

    • /User/LogIn 是默认的登录页

    • 未经授权的访问将被重定向至 /Error/AccessDenied

  • /Error/Index 是默认的错误处理页

注:如果你的网站不支持 HTTPS,记得修改 CookieSecurePolicy 为不强制要求 HTTPS:

  1. option.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;

一些细节

wwwroot 文件夹

wwwroot 本质上是个文件夹,它有个地球图标。它的特点是它映射为网站的根目录(~)。所有的静态内容,例如 .html、图像文件、JS 文件和库、CSS 文件和库等都应该存放在该文件夹内。

上面代码中的 app.UseStaticFiles(); 就是启用静态内容。

正如我们所知,静态内容不经过 web 服务器处理,它们将被原样返回给浏览器进行渲染。

_ViewStart.cshtml

_ViewStart.cshtml 中的代码将在每个 view 渲染前都运行一遍。

_ViewImports.cshtml

只有一行代码:

  1. @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

该代码将 Microsoft.AspNetCore.Mvc.TagHelpers 命名空间中的所有 Tag Helper 导入视图渲染的上下文。简单说,我们现在可以在视图页面使用 Tag Helper 了。

EF Core 生成 Domain Models

参考 EF Core 的使用 通过上节创建的数据库生成领域模型。

注:当你使用 MySQL 生成领域模型类后,你可能需要在 dbContext 中删除下面这两个构造器:

  1. public CoreBBContext()
  2. {
  3. }
  4. public CoreBBContext(DbContextOptions<CoreBBContext> options)
  5. : base(options)
  6. {
  7. }

配置数据链接

通过 EF Core 生成的 dbContext 类里面会显式保存连接字符串,我们需要通过创建应用设置文件 appsetting.json,并将连接字符串移动到该配置文件中。

appsettings.json:

  1. {
  2. "ConnectionStrings": {
  3. "DefaultConnection": "Server=118.x.x.x;Database=corebb;Uid=xxx;Pwd=xxx;SslMode=none"
  4. }
  5. }

然后打开 corebbContext.cs 将 OnConfiguring 方法改为:

  1. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  2. {
  3. if (!optionsBuilder.IsConfigured)
  4. {
  5. var builder = new ConfigurationBuilder()
  6. .SetBasePath(Directory.GetCurrentDirectory())
  7. .AddJsonFile("appsettings.json");
  8. var configuration = builder.Build();
  9. optionsBuilder.UseMySql(configuration.GetConnectionString("DefaultConnection"));
  10. }
  11. }

最后在 Startup.cs 的 ConfigureServices 方法中添加下面代码:

  1. services.AddDbContext<corebbContext>();

这样就将 corebbContext 类注册到 ASP.NET Core 依赖注入容器中了。

Lab_Files 2.zip