将空 Web 项目配置为 MVC 项目
打开 Startup.cs 修改代码为:
public class Startup{public void ConfigureServices(IServiceCollection services){services.AddMvc();services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(option => {option.LoginPath = "/User/LogIn";option.AccessDeniedPath = "/Error/AccessDenied";option.Cookie.SecurePolicy = CookieSecurePolicy.Always;});}public void Configure(IApplicationBuilder app, IHostingEnvironment env){app.UseExceptionHandler("/Error/Index");app.UseStaticFiles();app.UseAuthentication();app.UseMvcWithDefaultRoute();}}
加载并启用 MVC 组件
- 默认路由是
{controller=Home}/{action=Index}/{id?}
- 默认路由是
加载并启用身份验证组件
允许使用静态文件,且根目录为 wwwroot
启用 Cookie 身份验证
/User/LogIn是默认的登录页未经授权的访问将被重定向至
/Error/AccessDenied
/Error/Index是默认的错误处理页
注:如果你的网站不支持 HTTPS,记得修改 CookieSecurePolicy 为不强制要求 HTTPS:
option.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
一些细节
wwwroot 文件夹
wwwroot 本质上是个文件夹,它有个地球图标。它的特点是它映射为网站的根目录(~)。所有的静态内容,例如 .html、图像文件、JS 文件和库、CSS 文件和库等都应该存放在该文件夹内。
上面代码中的 app.UseStaticFiles(); 就是启用静态内容。
正如我们所知,静态内容不经过 web 服务器处理,它们将被原样返回给浏览器进行渲染。
_ViewStart.cshtml
_ViewStart.cshtml 中的代码将在每个 view 渲染前都运行一遍。
_ViewImports.cshtml
只有一行代码:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
该代码将 Microsoft.AspNetCore.Mvc.TagHelpers 命名空间中的所有 Tag Helper 导入视图渲染的上下文。简单说,我们现在可以在视图页面使用 Tag Helper 了。
EF Core 生成 Domain Models
参考 EF Core 的使用 通过上节创建的数据库生成领域模型。
注:当你使用 MySQL 生成领域模型类后,你可能需要在 dbContext 中删除下面这两个构造器:
public CoreBBContext(){}public CoreBBContext(DbContextOptions<CoreBBContext> options): base(options){}
配置数据链接
通过 EF Core 生成的 dbContext 类里面会显式保存连接字符串,我们需要通过创建应用设置文件 appsetting.json,并将连接字符串移动到该配置文件中。
appsettings.json:
{"ConnectionStrings": {"DefaultConnection": "Server=118.x.x.x;Database=corebb;Uid=xxx;Pwd=xxx;SslMode=none"}}
然后打开 corebbContext.cs 将 OnConfiguring 方法改为:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){if (!optionsBuilder.IsConfigured){var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");var configuration = builder.Build();optionsBuilder.UseMySql(configuration.GetConnectionString("DefaultConnection"));}}
最后在 Startup.cs 的 ConfigureServices 方法中添加下面代码:
services.AddDbContext<corebbContext>();
这样就将 corebbContext 类注册到 ASP.NET Core 依赖注入容器中了。
