将空 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 依赖注入容器中了。