基本概念
Asp.Net Core Mvc是.NET Core平台下的一种Web应用开发框架
符合Web应用特点
.NET Core跨平台解决方案
MVC设计模式的一种实现
环境准备
安装最新版Visual Studio 2017
安装最新版.NET Core Sdk
第二课 控制器的介绍控制器定义方式:
命名以Controller结尾
使用ControllerAttribute标注
public class TestController : Controller { } [Controller] public class Test : Controller { }默认路由规则
域名/控制器类/方法
{Domain}/{Controller}/{Action}
数据形式
QueryString: ?name=zhangsan&age=22
Form
Cookie
Session
Header
HttpRequest
HttpRequest 是用户请求对象
提供获取请求数据的属性
Cookies,Headers,Query,QueryString,Form
public IActionResult Hello() { // Query var name = Request.Query["name"]; // QueryString var query = Request.QueryString.Value; // Form var username = Request.Form["username"]; // Cookies var cookie = Request.Cookies["item"]; // Headers var headers = Request.Headers["salt"]; return Content("Hello"); }HttpContext
HttpContext是用户请求上下文
提供Session属性获取Session对象
Session.Set 设置
Session.Remove 移除
Session.TryGetValue 获取数据
public IActionResult Hello() { // byte[] HttpContext.Session.Set("byte", new byte[] { 1, 2, 3, 4, 5 }); var bytes = HttpContext.Session.Get("byte"); // string HttpContext.Session.SetString("name", "tom"); var name = HttpContext.Session.GetString("name"); // int HttpContext.Session.SetInt32("id", 20); var id = HttpContext.Session.GetInt32("id"); HttpContext.Session.Remove("name"); HttpContext.Session.Clear(); return Content("Hello"); }数据绑定
把用户请求的数据绑定到控制器方法的参数上
支持简单类型与自定义类型
绑定规则是请求数据名称与参数名称一致
如查询字符串key名称跟参数一致
Form表单名称跟参数一致
public IActionResult Hello(RequestModel request,int? age) { // 查询字符串 var test = Request.Query["test"]; // 简单类型 var userAge = age; // 自定义类型 var name = request.Name; return Content("Hello"); } public class RequestModel { public string Name { get; set; } }内容补充
如果以Controller结尾的都是控制器,那如果程序里面由一些业务命名的时候也是以Controller结尾,怎么办?
NonControllerAttribute
/// <summary> /// 拍卖师控制类 /// </summary> [NonController] public class AuctionController { }常用特性
特性 数据源FromHeaderAttribute 请求头数据
FromRouteAttribute 路由数据
FromBodyAttribute 请求体
FromFormAttribute 表单数据
FromQueryAttribute 查询字符串
FromServicesAttribute 服务注册
public IActionResult Say( [FromForm]string name, [FromQuery]int age, [FromHeader] string salt, [FromBody] string content ) { return View(); }
特性参数
通过特性修饰参数来影响绑定逻辑
灵活扩展
IActionResult
动作结果接口
具体实现
JsonResult:返回JSON结构数据
RedirectResult:跳转到新地址
FileResult:返回文件
ViewResult:返回视图内容
ContentResult:文本内容
第三课 视图与表单数据传递
ViewData
ViewBag
tempData
Model
Session
Cache
ViewData ViewBag键值对 动态类型
索引器 ViewData的封装
支持任意类型 动态属性
TempData Cache Session
视图级别 应用程序级别 会话级别
只允许消费一次 服务器端保存 服务器端保存
可多次赋值 可设置有效期 键值对形式
键值对形式 键值对形式
Cache
与.NET Framework时代不同,一种全新实现
IMemoryCache接口
依赖注入方式获取
IMemoryCache.Get/Set操作数据
[Controller] public class Test : Controller { private readonly IMemoryCache _cache; public Test(IMemoryCache memoryCache) { this._cache = memoryCache; } public IActionResult ReadCache() { _cache.Set("name","tom"); _cache.Get("name"); _cache.Set("age",30); _cache.Get("age"); User tom = new User(){ Name = "admin",Pwd = "123456"}; _cache.Set<User>("user",tom); _cache.Get<User>("user"); return Content("ok"); } } public class User { public string Name { get; set; } public string Pwd { get; set; } }ViewStart
以_ViewStart.cshtml命名,固定名称,不能更换
一般放在视图所在目录的根目录下
自动执行,无需手工调用
不要再ViewStart中做大量的业务操作
ViewImport
以_ViewImport.cshtml命名,固定名称,不能更换
只作引入操作
一般放在视图所在目录的根目录下
自动执行,无需手工调用
视图中可以使用@using关键字引入所需命名空间
通过ViewImport做全局性的命名空间引入,减少在每个页面中引入的工作量
第四课 数据验证