ASP.NET Core MVC学习笔记
最近由于疫情紧张,遂在家办公,在领导的带领下,学习了一下.Net Core MVC。
一,构建web应用
1.选择c#-所有平台-web 找到ASP.NET Core web应用程序

2.项目命名之后转至如下界面:选择Web应用程序(模型视图控制器)。

Ok点击创建,这个项目的基本框架就生成了。
二,EF-Code First 数据迁移
1,在Models里面新建实体类和数据库上下文类,并添加相对应的引用和框架

具体代码如下:
实体类:
public class InfoUser
{
[Key]
[StringLength()]
[DisplayName("用户名")]
[Required(ErrorMessage = "用户名不能为空")]
public string UserName { get; set; }
[StringLength()]
[DisplayName("密码")]
[Required(ErrorMessage = "密码不能为空")]
public string Password { get; set; }
[DisplayName("创建日期")]
public DateTime DTCreate { get; set; }
[DisplayName("登陆日期")]
public DateTime DTLogin { get; set; } public byte[] HeaderImg { get; set; }
}
/// <summary>
/// 博客表
/// </summary>
public class InfoBlog
{
public int ID { get; set; }
[StringLength()]
public string UserName { get; set; }
[StringLength()]
public string Title { get; set; } public string Content { get; set; }
public int VisitCount { get; set; }
public DateTime DTCreate { get; set; }
}
/// <summary>
/// 回复表
/// </summary>
public class InfoReply
{
public int ID { get; set; }
public int BlogID { get; set; }
[StringLength()]
public string UserName { get; set; }
public string Content { get; set; }
public DateTime DTCreate { get; set; }
}
/// <summary>
/// 日志表
/// </summary>
public class InfoLog
{
public int ID { get; set; }
[StringLength()]
public string Title { get; set; }
public string Content { get; set; }
public DateTime DTCerate { get; set; } }
上下文类(需要继承DbContext):
public class DBXlp : DbContext
{
public DBXlp(DbContextOptions<DBXlp> options)
: base(options)
{ }
//add-migration init update-database
public DbSet<InfoUser> InfoUsers { get; set; }
public DbSet<InfoBlog> InfoBlogs { get; set; }
public DbSet<InfoReply> InfoReplies { get; set; }
public DbSet<InfoLog> InfoLogs { get; set; } }
2,通过NuGet添加下面的两个包

3,在appsettings.json里面添加连接数据库的字符串
{
"ConnectionStrings": {
"DbXlp": "Server=.;Database=dbXlp;User id=sa;Password=123456"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
4,然后在 Startup.cs 的 ConfigureServices(IServiceCollection services) 中,我们作为一个服务注册了上下文对象。
services.AddDbContext<DBXlp>(options=>options.UseSqlServer(Configuration.GetConnectionString("DbXlp")));
5,打开 工具->NuGet包管理器->程序包管理器控制台
- 输入命令:add-migration init(可随意)(为挂起的Model变化添加迁移脚本 )
- 输入命令:update-database( 将挂起的迁移更新到数据库 )

Ok 可以看到下面数据库里已经有了对应表信息!

三,使用Identity进行登录验证
在Startup中:
1.定义一个string类型的CookieScheme作为认证方案
public const string CookieScheme = "Cookies";
2.ConfigureServices中使用AddCookie设置选项
services.AddAuthentication(CookieScheme)
.AddCookie(CookieScheme, option =>
{
// 登录路径:这是当用户试图访问资源但未经过身份验证时,程序将会将请求重定向到这个相对路径。
option.LoginPath = new PathString("/account/login");
// 禁止访问路径:当用户试图访问资源时,但未通过该资源的任何授权策略,请求将被重定向到这个相对路径
option.AccessDeniedPath = new PathString("/account/denied");
});
3.在Configure方法中使用 UseAuthentication来调用认证中间件(如下图所示位置)

控制器里面:
创建一个包含用户信息的 cookie可以构造一个ClaimsPrincipal。用户信息会被序列化然后保存在cookie 里面。
public async Task<ActionResult> Logining()
{
var userName = Request.Form["UserName"];
var password = Request.Form["Password"];
var item = db.InfoUsers.Find(userName);
if (item != null && password == item.Password)
{
item.DTLogin = DateTime.Now;
db.SaveChanges();
//用Claim来构造一个ClaimsIdentity,然后调用 SignInAsync 方法。
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, userName));
var claimsIdentity = new ClaimsIdentity(claims, "Cookies");
//登录
await HttpContext.SignInAsync("Cookies", new ClaimsPrincipal(claimsIdentity));
return RedirectToAction("Index", "Blog");
}
else
ViewBag.Msg = "登陆失败";
return View();
}
public async Task<IActionResult> Logout()
{
//退出
await HttpContext.SignOutAsync("Cookies");
return RedirectToAction("Index", "Home"); }
然后我们只需要对那些需要授权登陆才能执行的界面或者操作标记[Authorize]即可:

最后我们也可以在Razor中判断是否授权成功:
@if (User.Identity.IsAuthenticated)
{
<textarea id="TextArea1" rows="10" class="form-control"></textarea>
<button onclick="Reply()" class="btn btn-primary">回复</button>
}
else
{
<a asp-action="Login" asp-controller="Account">登录</a>
}
就写到这里。下次继续!
ASP.NET Core MVC学习笔记的更多相关文章
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
sql server 关于表中只增标识问题 由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...
- Asp.Net Core WebApi学习笔记(四)-- Middleware
Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...
- ASP.NET Core 2 学习笔记(七)路由
ASP.NET Core通过路由(Routing)设定,将定义的URL规则找到相对应行为:当使用者Request的URL满足特定规则条件时,则自动对应到相符合的行为处理.从ASP.NET就已经存在的架 ...
- ASP.NET Core 2 学习笔记(十二)REST-Like API
Restful几乎已算是API设计的标准,通过HTTP Method区分新增(Create).查询(Read).修改(Update)和删除(Delete),简称CRUD四种数据存取方式,简约又直接的风 ...
- ASP.NET Core 2 学习笔记(十)视图
ASP.NET Core MVC中的Views是负责网页显示,将数据一并渲染至UI包含HTML.CSS等.并能痛过Razor语法在*.cshtml中写渲染画面的程序逻辑.本篇将介绍ASP.NET Co ...
- ASP.NET Core 2 学习笔记(十三)Swagger
Swagger也算是行之有年的API文件生成器,只要在API上使用C#的<summary />文件注解标签,就可以产生精美的线上文件,并且对RESTful API有良好的支持.不仅支持生成 ...
- ASP.NET Core 2 学习笔记(一)开始
原文:ASP.NET Core 2 学习笔记(一)开始 来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽然名称沿用ASP.NET, ...
- ASP.NET Core 2 学习笔记(六)MVC
ASP.NET Core MVC跟ASP.NET MVC观念是一致的,使用上也没有什么太大的变化.之前的ASP.NET MVC把MVC及Web API的套件分开,但在ASP.NET Core中MVC及 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(五)-- Filter
在上一篇里,介绍了中间件的相关内容和使用方法.本篇将介绍Asp.Net Core MVC框架的过滤器的相关内容和使用方法,并简单说明一下与中间件的区别. 第一部分.MVC框架内置过滤器 下图展示了As ...
随机推荐
- Jenkins自动执行python脚本输出测试报告
前言 在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作. 借助Jenkins,我们可以结合 Git/SVN 自动拉取 ...
- Elasticsearch 开箱指南
内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...
- NOI2.5 1817:城堡问题
描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # ...
- vue-cli3 axios解决跨域问题
这种错误就是跨域问题: 我百度了各种方法,最终下面这种方法解决了,直接上代码: 解决: 如果没安装axios: npm install axios -save //安装axios main.js / ...
- Python3之MySQL操作
1.安装pymysql PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,在使用之前需要进行安装,可以使用以下命令安装最新版的 PyMySQL: 1).在cmd命令 ...
- CAS的ABA问题详解
CAS的ABA问题详解 ABA问题 在多线程场景下CAS会出现ABA问题,关于ABA问题这里简单科普下,例如有2个线程同时对同一个值(初始值为A)进行CAS操作,这三个线程如下 1.线程1,期望值为A ...
- Git详解之特殊配置与钩子应用
前言 到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它. 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定义的要求. ...
- laravel 服务容器的由来 代码展示
<?php /** * 目的:代码的完善来说明从 基础类的调用到 工厂类的使用 再到容器的出现的原因 * (首先要明白工厂类和容器的关系 可以理解:容器就是工厂类的升级版(为了解决类的依赖)) ...
- hive安装启动错误总结
错误一: Exception in thread "main" java.lang.NoClassDefFoundError: jline/console/completer/Ar ...
- python中Threadlocal变量
在多线程环境下,每个线程都有自己的数据.一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁. 不加锁就会出现变量会被修改的问题,进而 ...