ASP.NET要点记录
ASP.NET CORE 学习 NOTE
What is ASP.NET Core MVC
M:Model 模型对象,在数据库中存取数据
C:Controller 控制器,系统中处理用户交互,控制和读取用户输入,向模型发送数据等
V:View 处理数据显示,可视为UI部分
Request Pipeline
检查和处理http请求 => 交给中间件(Middleware)处理
中间件接收上一个中间件的输出并传输给下一个中间件,有序排列产生Pipeline.
例如: request => logging => static files => MVC
Segments
自定义路由,与路径,文件类型等无关
{域名}/{Controller}/{Action}/{Parameter}
Attribute Routing
例如可以这样使用:
[Route("[Controller]/[Action]")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
其中的[Route("[Controller]/[Action]")]
可以写作[Route("admin/[Controller]/[Action]")]
等进而控制路由.
Action:POST
- Need “HttpPost” Attribute on Action function
Model
映射数据库;对象化数据;获取,更新,传递,保存数据;
Repository 仓库模式
对象化保存数据,可忽略如何保存保存形式等.
注册如系统依赖注入容器
AddTransient 每次发起请求则创建全新仓库请求结束则注销,每次数据相互独立
AddSingleton 只创建一个仓库,便于管理,可能造成数据污染
ASP.NET MVC ViewModel
View Model
View Model 中的数据会与UI界面双向绑定.
特点:
- 依然是模型
- 用视图模型代替数据上下文
- POCO(plain old class object),不包含方法的简单类
What is ASP.NET MVC ViewModel
将Model1,Model2中的数据部分映射组合为View Model
使用View Model的原因:
- 减少页面逻辑复杂度
- 处理页面的数据逻辑,管理页面状态
- 有利于团队协作和日后维护
Entity Framework Core
- 跨平台
- 可以建模
- 使用LINQ查询,更改,保存数据
- 可以通过异步进行数据提交与保存
- 提供一级缓存,便于提高重复查询的效率
- 提供数据迁移工具
组件
EDM实体数据模型 -> [ LINQ , Entity SQL ] -> Object Service -> Data Provider -> ADO.Net -> Database
常用验证特性
RequiredAttribute:用于验证必需数据字段。
RangeAttribute:用于验证数值字段的值是否在指定的范围之内
StringLengthAttribute:用于验证目标字段的字符串长度是否在指定的范围之内。
MaxLengthAttribute/MinLengthAttribute:用于验证字符/数组字典的长度是否小于/大于指定的上/下限。
CreditCardAttribute:用于验证数据字段值是信用卡号。
EmailAddressAttribute:用于验证电子邮件
PhoneAttribute:用于验证是否为电话格式
UrlAttribute:用于验证是否为Url
KeyAttribute:验证是否唯一
DisplayAttribute:指定显示的字符串
CompareAttribute:提供用于比较两个属性的特性。
ASP.Net Core Identity
- Password Hashing 密码哈希
- Tokenization 邮箱验证,账户锁定
- Two Facts Authentication 双因素账户验证
- Authentication 身份认证
- Authorization 授权
- External Login 第三方登录
细节和学习
请求参数
public IActionResult GetInfo([FormQuery]string mode)
{
switch(mode){
case "normal":
return View("Normal");
case "preview":
return View("Preview");
default:
return View("~/Views/Home/Index.cshtml");
}
}
阻止控制器中的方法公开为Action
为方法添加[NonAction]
属性.
重命名Action方法
为方法添加[ActionName("newName")]
属性.
目录浏览与文件服务
文件目录浏览与访问静态文件
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//上文省略
services.AddDirectoryBrowser();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath,"image")),
RequestPath = "/gifts"
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath,"image")),
RequestPath = "/gifts"
});
//访问 https://localhost:xxx/gifts以访问image文件夹
}
}
二者均需要时可选用FileServer
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//上文省略
services.AddDirectoryBrowser();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath)),
RequestPath = "/files",
EnableDirectoryBrowsing = true,
});
//访问 https://localhost:xxx/gifts以访问image文件夹
}
}