-
2-2创建实战项目
【开发模板的选择】【sdk版本的选择】【项目设置】
打开vs2019,点击create a new project,选择asp.net core web application,创建.net core 2.2 empty 空模板
项目依赖aspnetcore.app,aspnetcore.razor.design
c#依赖管理插件nuget,类似于java的maven,js的npm,都是项目构建和依赖解析的工具,完成项目依赖的自动安装,解决依赖冲突
项目文件csproj,其实是xml,itemgroup节点记录项目依赖包
appsetting.json文件保存项目的runtime设置,可以保存很多诸如数据库连接字符串,第三方信息,账号密码,token等
program.cs,startup.cs涉及整个系统的生命周期
项目添加文件夹wwwroot[【asp.net规范其为特殊文件夹存放所有前端静态文件如js,css,图片,视频等,该文件夹内所有文件都会被服务器托管】
properties下的launchsettings.json存储服务器端口信息等设置
startup.cs文件用于项目运行配置
查看全部 -
全部笔记:
start up :项目运行配置 管理依赖注入 中间间(configure-》Middelware) 以及处理请求通道(由IApplicationBuilder类创 建)
Program.cs-》
CreateDefaultDuilder(args)->1.加载主机和应用得配置信息
2.配置日志记录
3.设置web服务器
4.设置asp.net core的应用形式
Asp.net MVC routing系统
1.无需文件真正保存在硬盘上
2.访问文件无需后缀
3.URL结构与服务器文件夹结构无关
4.url将会被映射给Controller控制器来处理请求,不会映射给静态文件
http请求交给服务器-》controller来进行活动 之后再有controller响应http请求
URL:{域名}/Controller/Action
具体信息又分段路由segments(自定义路由)来处理
URL:{域名}/Controller/Action/{id}->action 函数的参数来进行页面处理获得数据输出
如何定义URL和Controller之间的映射规则?
默认路由系统。 app.UseMvcWithDefaultRoute();
{域名}/{Controller=Home}/{Action=index}/{Value?}
自定义默认路由:
使用中间件:
app.UseMvc(routes=>routes.MapRoute(name:"default",template:"{controller=Home}/{Action=index}/{Value?}"))
==app.UseMvcWithDefaultRoute();
在ASP.Net Mvc有两种路由模式
1.传统路由(使用路由表) Concentional routing
2.特性注释路由 Attribute routing
Conventional Routing
1.URl 被分解为Controller和action两个部分
2.使用路由表(routing table )来设置路由规则
例如:rotes.MapRoute(name:"default",templete:"{controller=Home}/{action=index}")
Atrtibute Routing:
1.使用简单,不再需要路由表,只要controller和action代码中直接使用
attribute来定义路由
Example:
[Route("[controller]/[action]")]
public class HomeController:Controller
{
//get :/<controller>/
public Stirng Index()
{
return "Hello From Home";
}
}
路由中间件:帮助我们解析URL,并映射给相对应得controller和action
//
Attribute Routing :
可以帮助我们用AOP 面向面向切面得形式可以为每一个controller甚至action
单独定义路由。Route("[controller]/[index]")
//
app.UseMvc(传入lamda表达式来设定自定义路由)
什么是MVC:
1.软件工程的架构方式
2.模型,视图和控制器
3.分离业务操作,数据显示,逻辑控制
视图:用户交互界面 展示输入,不操作数据,接受用户数据
模型:MVC架构得核心,表示业务模型或者数据模型,程序的业务逻辑。
如:算法的实现,数据的管理,输出对象的封装等等
控制器:接受用户得输入,并调用模型和视图去完成用户的请求处理
本身不处理数据
三层架构:
UI层 BLL 业务逻辑层,处理核心业务以及数据封装
DAL 表示数据访问
三层架构面向结构编程,而三个层级之间的完全解耦,完全可替代
MVC得每个部分都是紧密结合的,它的核心并不是解耦,而是重用。
MVC的优点:
耦合性低
可复用性高
可维护性高
缺点:
定义不明确,学习曲线陡
结构复杂
数据流动效率低
----控制器的工作原理--
Action 函数:
处理请求
返回特殊乐星IActionResult
默认http请求方式为Get
可接受url中的参数
Action:Post
如何处理POST请求:
[HttpPost]
public ActionResult Edit(int id,IFormCollection collection)
{
try
{
return RedirectionToAction(nameof(Index));
}
catch
{
return View();
}
}
什么是模型?
1.其实是一个类 映射数据库,对象化数据。
2.获取数据,更新数据,传递数据,保存数据等
3.处理业务逻辑,被视为BLL层
4.View Model与视图数据绑定
不过,定义不明确,经验很重要
可以是一个简单的poco类 也可以是一复杂的充血性领域模型(rich Domain Model)
模型的业务逻辑:
函数方法等,不会映射数据库,但会对数据进行更新。
举例:
模型属性:
public int Id{get;set;}
public string FirstName{get;set;}
public string UserName{get;set;}
public string ShortDescription{get;set;}
public decimal Phone{get;set;}
public string Email{get;set;}
public bool IsEmailConfirm{get;set;}
业务逻辑:
public void ConfirmEmail(string token)
{
if(isTokenValid)
{
this.IsEmailConfirm=true;//save to database
}
}
数据持久化模式:repository仓库模式
对象化数据,不用管数据是怎么保存的
使用仓库接口
举例:
public interface INoodleRespositoy
{
IEnumerable<Noodle> GetNoodles();
Noodle GetNoodleById(int ID);
}
使用模型和数据仓库的好处:
1.业务逻辑与数据模型紧密耦合,减少分层,降低代码数量
2.完全剥离数据库业务,程序员可以更专注于实现业务逻辑
3.面向对象编程,数据转化为对象,更符合程序员的思考方式
视图模型 ViewModel
ViewModel中的数据会与UI界面双向绑定,一旦ViewModel
中的数据发生任何变化,结果都会立即反应在UI界面中。
特点:
1.依然是模型
2.用视图模型替代数据上下文
3.poco(plain old class object),不包含方法的简单类
MVVM:model-view-view Model
为什么要使用ViewModel
1.减少页面逻辑的复杂度
2.处理页面的数据逻辑,管理页面状态
3.各种组件也可以相对解耦,既有利于团队协作与日后维护
管理前端框架工具:
项目名称(右击)-》client-site Library-》libman
Asp.Net Core Identity
1.Password Hashing
2.Tokenization
3.TwoFacts Authentication
4.Authentication
5.Authorization
6.External Login 第三方验证
查看全部 -
一、将普通类变成controller的三种方式:
1、直接在类名后面加Controller字样
2、在类前添加属性[Controller]
3、继承controller字样,类名后加:controller
二、
问:controlller和action的修饰public属性能不能改成private?
答:不可以。对controlller而言,会直接报错;对action而言,运行时http不能从外部对改action进行访问
三、
对于action的return类型可以是ActionResult,它可以根据数据类型自动做类型转换,并且向外部发送合适的数据。
return View()的时候可以根据一些约定来完成控制器和视图的绑定。
对action右击建立视图
查看全部 -
查看全部
-
1-1知识点
基础知识:.net core / 环境设置
asp mvc :mvc架构 / 路由系统 / razor
entity framework:仓库模式 / code first / 映射数据 / crud
身份认证:认证 / 授权
查看全部 -
嗯查看全部
-
使用 mysql 可以下载 Pomelo.EntityFrameworkCore.MySql 包
链接语句改成:
services.AddDbContext<AppDbContext>(options =>options.UseMySql(Configuration.GetConnectionString("MySqlConnection"), new MySqlServerVersion(new Version(8, 0, 28))));
配置:
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=LanzhouNoodleDb;Trusted_Connection=True;MultipleActiveResultSets=true",
"MySqlConnection": "Server=localhost;database=LanzhouNoodleDb;uid=root;pwd=12345678;"
},
查看全部 -
<h4><a href="http://note.youdao.com/s/5SDSS5Dl" title="markdown笔记">Controller</a></h4><hr /><ul class="list-paddingleft-2"><li><p>1.默认为GET请求</p></li><li><p>2.IActionResult可以返回任何类型,自动进行映射</p></li><li><p>3.POST请求使用[HttpPost]</p></li></ul><hr /><h4><a href="#%E5%91%BD%E5%90%8D"></a>命名</h4><p>1.命名为XXX+Controller,用此方法会默认认为是Controller</p><pre>using System;namespace ShopMail.controllers{ public class EmptyClassController { public EmptyClassController() { } //访问的方法 public String Index() { return "Hello"; } } }</pre><p>2.如果使用注入方式注入也可以实现Controller</p><pre>using System;//使用注入必须导入包using Microsoft.AspNetCore.Mvc;namespace ShopMail.controllers{ [Controller] public class EmptyClass { public EmptyClass() { } //访问的方法 public String Index() { return "Hello"; } } }</pre><p>3.如果继承Controller类也可以实现Controller</p><pre>using System;//使用继承必须导入包using Microsoft.AspNetCore.Mvc;namespace ShopMail.controllers{ public class EmptyClass : Controller { public EmptyClass() { } //访问的方法 public String Index() { return "Hello"; } } }</pre><hr /><p>方式2和方式3的区别在于</p><ul class="list-paddingleft-2"><li><p>如果使用方式2较方式3 使用this关键字将不会有很多父类方法</p></li><li><p>方法3中 会得到很多父类的辅助方法</p></li></ul><h5><a href="#%E5%A4%96%E9%83%A8http%E8%AE%BF%E9%97%AE%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8private%E4%BF%AE%E9%A5%B0"></a>外部http访问不能使用private修饰</h5><h4><a href="#actionresult"></a>ActionResult</h4><ul class="list-paddingleft-2"><li><p>返回文字</p></li></ul><pre>public ActionResult Hello() { return Content("Hello ActionResult"); }</pre><ul class="list-paddingleft-2"><li><p>返回视图</p></li></ul><pre> public ActionResult Contact(){ return View(); }</pre><ul class="list-paddingleft-2"><li><p>macOS需要手动创建Views目录,并创建类名目录/方法名.cshtml 即为</p></li></ul><pre>Views/Test/contact.cshtml</pre><p><br /></p>查看全部
-
两种路由模式
传统路由(使用路由表)Conventional routing
特征注释路由 Attribute routing
传统路由(使用路由表)Conventional routing
路由表配置
routes.MapRoute( name:"default", templete:"{controller=Home}/{action=Index}");
特征注释路由 Attribute routing
[Route("api/UploadFiles")]public Hashtable UploadFiles(List<IFormFile> files){ }
使用
添加路由配置 .net core 3.1
ConfigureServices方法中-services.AddMvc(option => option.EnableEndpointRouting = false);//注册MVC同时禁用endpointConfigure方法中-app.UseMvcWithDefaultRoute();
特征类型
namespace ShopMail.controllers{ [Route("[controller]/[action]")] public class HomeController : Controller { public String hola() { return "Hola"; } } }会映射到https://localhost:5001/home/hola
传统路由
Configure方法中-app.UseMvcWithDefaultRoute();
新建controllers文件夹,并新建controller模版,访问路径为 会映射为 controller除去Controller的名字+对应方法名https://localhost:5001/home/hola
吐槽下 慕课不支持markdown=。= 需要的朋友点击上面标题超链 如果有不对的地方,请指正 本人也在学习中....
查看全部 -
使用模型和数据仓库的好处:
1、业务逻辑和数据模型紧密耦合,减少分层、降低了代码的数量
2、完全剥离数据库业务,程序媛可以更专注于实现业务逻辑
3、面向对象编程,数据转化为对象
查看全部 -
默认路由利用{}的语法实现controller和action的通配
可以根据命名规范自动地适配controller.cs文件中controller前的字段
直接与URL进行映射。
查看全部 -
program.cs
主函数main里的CreateDefaultBuilder运行并创建了一个虚拟网站托管主机
startup.cs
在ConfigureServices方法中注入各种组件的依赖
在Configure方法,配置http请求通道request pipline
中间件Middelware是组装到应用管道中,用来处理请求和响应的软件
查看全部 -
如果你使用的是ASP.net core 3.0
应当如下设置
在Startup.cs文件中,将教程中的app.UseMvcWithDefaultRoute();修改为
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
查看全部 -
。net core数据验证
查看全部 -
admin管理员路由限制
查看全部
举报