ASP.NET Core MVC 从入门到精通之初窥门径
随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员,仅供学习分享使用。
什么是MVC?
MVC是一种架构模式,也是一种设计规范,主要是为了解决业务逻辑,数据,页面展示相互耦合而设计出来的一种前后端分离的系统架构。对于小系统而言,当有需求需要扩展时,是非常轻而易举的;但随着系统的越来越庞大,代码之间的耦合也越来越高,可谓牵一发而动全身,修复1个缺陷,可能会潜在的引入3个缺陷。在这种情况下,高内聚,低耦合,减少模块之间的耦合度就显得尤为重要,MVC也从众多的方案中脱颖而出,并且越来越被大家认可。
什么是ASP.NET Core MVC?
在.Net Core出现之前,所有的开发框架都是基于.Net Framework的,但是.Net Framework只适用于Windows操作系统,且没有开源,全部是有Microsoft公司推进。正所谓‘一人计短,二人计长’,开源才是推动技术进步的最快方法,所以为了不被其他的开发语言市场逐渐蚕食,.Net Core也出现在了大众面前。在.Net Core出现之初,就吸引了大批的忠实追随者,ASP.NET Core MVC也在MVC在.Net Core的实现。模型-视图-控制器 (MVC) 体系结构模式将应用程序分成 3 个主要组件组:模型、视图和控制器。
前提条件
在学习ASP.NET Core MVC开发Web程序之前,需要具备以下基础条件:
- C#基础知识,ASP.NET Core MVC是基于.Net 进行开发的,所以掌握基本的C#相关内容是很有必要的。
- Html,JavaScript,CSS基础知识,是进行B/S模式系统开发必备内容。
- 开发工具【Visual Studio 2022】安装使用,可到官网进行下载安装包。
创建ASP.NET Core MVC程序
在Visual Studio 2022中,创建新项目,选择【ASP.NET Core Web应用(模型-视图-控制器)】模板,如下所示:
在【配置新项目】页面,输入项目名称,选择保存位置,然后点击【下一步】
在【其他信息】页面,选择目前比较稳定的.NET 6.0(长期支持),然后点击【创建】按钮,如下所示:
由于是通过模板进行创建的项目,所以默认会创建基础的文件夹和示例,如下所示:
注意:基于.Net Framework和基于.Net Core创建的ASP.NET MVC项目,默认生成的文件和目录结构存在一些细微的差异:
- ASP.NET Core MVC的配置,是基于JSON格式进行配置的。如appsettings.json ,Properties\launchSettings.json 等。
- Program是应用程序的入口,没有Main函数。
运行程序
在Visual Studio 2022中运行程序,或F5快捷键,启动程序,会在浏览器中打开默认页面,并启动一个控制台窗口,用于日志输出,如下所示:
修改端口
通过模板创建的ASP.NET Core MVC程序,默认https端口为7116,http端口为5043。如果在浏览器中输入http://localhost:5043,会自动跳转到 https://localhost:7116。可以根据具体需要,修改默认端口,在launchSettings.json配置文件中,可修改默认配置端口,如下所示:
默认路由
在通过模板创建的ASP.NET Core MVC项目中,默认支持MVC路由,如果是创建的空项目,则需要手动添加,主要由以下三行代码:
- 注入支持控制器视图服务。
- 使用路由
- 默认路由配置,可理解为缺省值配置
具体如下所示:
ASP.NET Core MVC的约定
在ASP.NET Core MVC中,流行【约定大于配置】的说法,即在同一个项目中,大家都按照同一种方式去开发,会使项目更易于维护,可读性更高,同时简化大量的配置,以提高工作效率。
ASP.NET Core MVC中的约定,体现如下:
- 控制器的约定:
- 所有的Controller必须放到Controllers文件夹中,并以【名称+Controller】的方式命名,如:HomeController。
- 每个Controller都对应View中的一个文件夹,文件夹的名称跟Controller名相同,如:Home。
- Controller中的方法名都对应一个View视图(非必须,但是建议这么做)而且View的名字跟Action的名字相同。
- 控制器必须是非静态类,并且要实现IController接口,默认继承自Controller。
- Controller类型可以放到其他项目中
- 视图的约定:
- 所有的视图必须放到Views目录下。
- 不同控制器的视图用文件夹进行分割,每个控制器都对应一个视图目录。
- 一般视图名字跟控制器的Action相对应(非必须)。
- 多个控制器公共的视图放到Shared:例如公用的错误页、列表模板页、表单模板页等等;
添加控制器
在Controllers文件夹上点击右键 添加(D)--控制器(T)...打开控制器窗口,如下所示:
在新窗口选择【MVC控制器 - 空】,然后点击【添加】按钮
在添加新项,输入控制器名称HelloController,然后点击【添加】,如下所示:
注意:所有的控制器,均已Controller结尾。
添加Action
控制器中的每个 public
方法均可作为 HTTP 终结点调用,称之为Action,通常表示一个请求响应。Action默认返回一个IActionResult,表示一个页面,同时也可以返回其他数据类型,如string,int等。如下所示:
using Microsoft.AspNetCore.Mvc;namespace DemoCoreMVC.Controllers
{public class HelloController : Controller{public IActionResult Index(){return View();}public string Welcome(){return "欢迎公子小六...";}}
}
创建视图
在ASP.NET Core MVC项目中,可以通过在Action名称上右键,点击【添加视图(D)】,打开视图添加窗口,如下所示:
可以选择基于模型的视图,或者空视图,暂时先选择【Razor视图 - 空】,然后点击【添加】按钮,如下所示:
输入视图名称【默认为cshtml后缀,支持Razor语法】,点击【添加】。
创建成功后,会在Views目录下,创建Hello文件夹及创建Index.cshtml文件。修改内容如下所示:
运行程序,并在浏览器中输入https://localhost:7116/Hello,如下所示:
注意:以上页面显示,除了红框内的信息为Views\Hello\Index.cshtml内容,其他的均为Layout布局模板中内容。若不需要加载布局模板内容,或者指定新的Layout布局模板,可将页面中的Layout设置为空,或其他路径,如下所示:
@*For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{Layout = null;
}
<h1>欢迎公子小六</h1>
以上就是ASP.NET Core MVC从入门到精通之初窥门径的全部内容,后续会继续讲解ASP.NET Core MVC其他内容。
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/333f64b332a54298011f695dcf6df780.png)
ASP.NET Core MVC 从入门到精通之初窥门径
随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,…...
![](https://img-blog.csdnimg.cn/img_convert/dd9cb0388b189d44295f75a6ee1739c9.jpeg)
英码科技智慧环卫:构建宜居城市新篇章
随着城市化进程的加快,城市环境卫生问题日益凸显。如何提高城市环境卫生管理水平,提升城市品质,成为了各级政府和社会各界关注的焦点。智慧环卫作为一种结合现代信息技术的环境卫生管理方式,正在逐渐成为解决城市环境卫生问题的有…...
![](https://www.ngui.cc/images/no-images.jpg)
在Spring Boot微服务使用HashOperations操作Redis Hash哈希散列
记录:403 场景:在Spring Boot微服务使用RedisTemplate的HashOperations操作Redis Hash哈希散列。 版本:JDK 1.8,Spring Boot 2.6.3,redis-6.2.5 1.微服务中Redis配置信息 1.1在application.yml中Redis配置信息 spring:redis:host: 192.1…...
![](https://www.ngui.cc/images/no-images.jpg)
innobackupex备份mysql产生returned OS error 124
解决使用innobackupex备份mysql产生returned OS error 124 xtrabackup 报错Too many open files 故障处理 一、背景 客户反馈数据库备份失败。 二、环境描述 [rootmes-node1 ~]# mysql -V mysql Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper [root…...
![](https://img-blog.csdnimg.cn/d3b59792a51d4b01bd25d57421e169b9.png)
明明有index.jsp文件访问的时候却显示404
重建一下项目...
![](https://img-blog.csdnimg.cn/c9a4c85489374cbba913a220a9ee6756.jpeg)
人工智能前沿——「全域全知全能」人类新宇宙ChatGPT
🚀🚀🚀OpenAI聊天机器人ChatGPT——「全域全知全能」人类全宇宙大爆炸!!🔥🔥🔥 一、什么是ChatGPT?🍀🍀 ChatGPT是生成型预训练变换模型(Chat G…...
![](https://www.ngui.cc/images/no-images.jpg)
eslint-plugin-import - import/order
eslint-plugin-import是什么? 该插件目的在于支持ES6以上的导入/导出语法,并防止文件路径和导入名称拼写错误的问题。 import/order是什么? 按照约定的规则对引入的模块进行排序。 import/order常用规则介绍 groups 约定引入模块顺序的…...
![](https://www.ngui.cc/images/no-images.jpg)
selenium知识点大全
selenium知识点大全 在使用selenium之前必须先配置浏览器对应版本的webdriver。 1. 初始化浏览器对象 from selenium.webdriver import Chrome# 创建浏览器对象,并且打开一个空的页面 browser Chrome()# 关闭浏览器 browser.close()2. 访问指定网页 from selen…...
![](https://img-blog.csdnimg.cn/img_convert/6a5a20316c8dc9ef7ab157ec38eec9f6.png)
Biotin-PEG-SH生物素-聚乙二醇-巯基结构式;SH-PEG-Biotin
Biotin-PEG-SH 生物素-聚乙二醇-巯基 中文名称:生物素-聚乙二醇-巯基 英文名称:Biotin-PEG-SH Biotin-PEG-Thiol 性状:粘稠液体或者固体粉末,取决于分子量 溶剂:溶于水和DCM、DMF等大部分有机溶剂 分子式&#x…...
![](https://img-blog.csdnimg.cn/img_convert/22baab96c79f8f99efa56a9b86f14ceb.png)
【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析
简介 手机在网状态 API 支持传入手机号码,查询手机号在网状态,返回在网、在网不可用、不在网(销号/未启用/停机)等多种状态,查询手机号在网状态之后,可以根据具体的业务需求来进行不同的处理。 本文主要介…...
![](https://img-blog.csdnimg.cn/e01b8db93337419ebaea208a5b2246e0.png)
Python json 数据提取 jsonpath 详解
一、JsonPath JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。也就是独立的可以配合多种语言进行匹配的目标值的一种类库,和…...
![](https://img-blog.csdnimg.cn/9e55881f08644fb586992960e24901ec.png)
TCP和UDP的区别以及应用场景
区别 首先UDP协议非常简单,头部只有8个字节: 校验和为了提供可靠的UDP首部和数据而设计,防止收到在网络传输中受损的UDP包。 再对比下TCP协议: 传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件…...
![](https://img-blog.csdnimg.cn/12095740e64a4f90bc7fbdcdc2ddc583.png)
高铁轮毂表面缺陷的<视觉显著性>超像素图像检测方法
内容:提出一种基于视觉显著性注意机制的超像素自适应检测方法; 设计视觉显著性注意机制滤波器用于粗略定位出缺陷空间范围,结合超像素分块图像分割方法消除光照不均匀引起的噪声干扰,有效地完成缺陷区域的边界分割和实时特征提取&…...
![](https://img-blog.csdnimg.cn/9df3393683d144ffa0f85cb3af1b2f75.png)
纺织工业库房如何有效防潮?恒温恒湿真的有效吗?
纺织工业库房中的设备或存放的货物对温度或湿度的变化又非常敏感,温度或湿度的波动可能会产生一些问题。 针对库房环境温湿度的监测,若采用人工检测的方式,很难管控精准且工作效率低;其次,人工综合成本高。那么该如何实…...
![](https://www.ngui.cc/images/no-images.jpg)
SDK之动态链接库开发—基本概念
动态链接库(Dynamic Link Library,简称 DLL)是一种在运行时加载的库,可用于在多个应用程序之间共享代码和数据。与静态链接库相比,动态链接库的主要优劣势如下: 优势: 空间效率更高࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
spring生命周期、IOC工作流程、AOP过程,循环依赖、BeanFactory和FactoryBean
1、生命周期 划分为5个阶段: 创建前准备阶段、创建实例阶段、 依赖注入阶段、 容器缓存阶段、销毁实例阶段。一、创建前准备阶段:这个阶段主要的作用是,Bean 在开始加载之前,需要从上下文和相关配置中解 析并查找 Bean 有关的扩展…...
![](https://img-blog.csdnimg.cn/70e0bdb885da4b8ba34336cc7c0b594d.png)
小黑子—Java从入门到入土过程:第六章
Java零基础入门6.0Java系列第六章1. 面向对象综合练习1.1 文字版格斗游戏参数占位,格式化输出回顾关于printf和print和println的区别1.2 对象数组练习1.2.1 练习一1.2.2 练习二1.2.3 练习三1.2.4 练习四1.3 键盘录入回顾1.4 复杂对象数组练习1.4.1 复杂练习一1.4.2 …...
![](https://www.ngui.cc/images/no-images.jpg)
python实战应用讲解-【numpy数组篇】常用函数(二)(附python示例代码)
目录 Python numpy.flipud() Python numpy.insert() Python numpy.ravel() Python numpy.shapes() Python numpy.roll() Python numpy.rot90() Python numpy.append() Python numpy.flipud() Python numpy.flipud()函数将数组(每列中的项)按上下方向翻转,但保留形状。…...
![](https://img-blog.csdnimg.cn/e2a2f09ea6aa4b2c86f0383bcf500738.png)
windows10 java 创建合约
a. 安装Nodejs 主要是方便使用npm 命令 并配置环境变量 b.使用 npm 可以便捷地安装Solidity编译器solcjs npm install -g solc c.找个目录 创建一个solidity文件 如 // SPDX-License-Identifier: GPL-3.0pragma solidity >0.8.2 <0.9.0;/*** title Storage* dev Store…...
![](https://www.ngui.cc/images/no-images.jpg)
阿里巴巴获得商品详情 API调用示例
为了进行此平台API的调用,首先我们需要做下面几件事情。 1、 获取一个KEY。 2、 参考API文档里的接入方式和示例。 3、查看测试工具是否有需要的接口,响应实例的返回字段是否符合参数要求。 4、利用平台的文档中心和API测试工具,对接口进…...
![](https://www.ngui.cc/images/no-images.jpg)
企业工程管理系统源码-数字化可视化项目管理平台
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
![](https://www.ngui.cc/images/no-images.jpg)
【C语言】一文带你简单了解C语言
这里写目录标题)引言C语言概述基础语法数据类型运算符循环语句分支语句函数数组指针文件操作内存管理高级特性结构体枚举类型联合体预处理器应用场景操作系统编译器游戏开发嵌入式系统引言 C语言是一种通用的计算机编程语言,具有高效、灵活、可移植等特点…...
![](https://img-blog.csdnimg.cn/1164531dbb5842efa6bdfbcc6515cb37.png)
LeetCode 589 LeetCode590 N叉树的前序遍历和后序遍历
题目: N叉树的前序遍历:给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔。 示例 1: 输入:root [1,null,3,2,4,null,5,…...
![](https://img-blog.csdnimg.cn/img_convert/c13a413d60cc2732d599bd2788aa489c.png)
为什么CAD多段线没有面积属性或数值不对?快看过来!
有些设计师小伙伴在CAD制图过程中,会遇到这样的一个问题:在CAD图纸中直接选取线条后用工具标出来的面积是实际面积的两倍,而且用CAD面积查询命令直接选择对象查不出面积,这是为什么呢?本文就和小编来给大家分享一下CAD…...
![](https://www.ngui.cc/images/no-images.jpg)
WRF后处理:使用ncl脚本批量提取wrfout变量并输出/Shell 入门:Shell进入不同文件夹执行脚本
目录背景思路NCL提取wrfout特定变量Shell批量执行背景 在之前的博客WRF后处理总结我提到过将NCL与python结合进行后处理的问题,即,使用NCL进行wrfout变量的提取、计算、输出,再用已有python脚本绘图,这样可以极大节省时间。 对于…...
![](https://www.ngui.cc/images/no-images.jpg)
Consul在Windows系统下的安装与启动
1、Consul的简介 Consul 是由 HashiCorp 公司推出的一款开源工具,用于实现分布式系统的服务发现与服务配置。它内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key-Value 存储、多数据中心方案。 Consul 使用 GO 语言编写,因此天然具有可移…...
![](https://img-blog.csdnimg.cn/25e42e8d89504832bc9554d2054b00cd.png)
2022国赛16:神州路由器交换机BGP配置实例1
实验拓扑图 一、基本配置: R1配置: Router>ena Router#conf Router_config#host R1 R1_config#int g0/0 R1_config_g0/0#ip add 202.11.1.1 255.255.255.252 R1_config_g0/0#int l0 R1_config_l0#ip add 1.1.1.1 255.255.255.255 R1_confi...
![](https://img-blog.csdnimg.cn/7c65b47ac08b4a27b75f11631260488b.png)
PaddlePaddle NLP学习笔记1 词向量
文章目录1.语言模型 Language Model1.1 语言模型是什么1.2 语言模型计算什么1.3 n-gram Language Model2.神经网络语言模型NNLM2.1 N-gram模型的问题3. 词向量3.1 词向量(word Embedding)word2vec 词向量训练算法3.2 如何把词转换为词向量?3.3如何让向量具有语义信息…...
![](https://www.ngui.cc/images/no-images.jpg)
无重复全排列 [2*+]
目录 无重复全排列 [2*+] 程序设计 程序分析 无重复全排列 [2*+] 输出N个数的无重复全排列 Input 输入一个数值N 1<=N=50 Output 输出N个数的无重复全排列,每个数之间用空格隔开 最后一行输出无重复全排列的个数。 Sample Input 3 Sample Output 1 2...
![](https://img-blog.csdnimg.cn/1b48e1bf50c947a0b047dab446f9a23a.png#pic_center)
【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了....
谈到现状,国内的软件测试行情目前呈现了两极分化的极端情况。 一个是早期的手工测试人员吐槽工作不好做,即使有工作也是外包,而且薪资太低;一方面是很多互联网企业感叹自动化测试人才难找,有技术的自动化测试工程师&a…...
![](/images/no-images.jpg)
创建私人网站/石家庄百度seo代理
🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…...
![](/images/no-images.jpg)
wordpress商城怎么样/100%上热门文案
2020/7/28 依旧是和sql有着不解之缘的一天 总结一下在python中用sql语句的一些汇总 insertinsert into tablename(column1,column2...) values(value1,value2...) insert into tablename(column1,column2...) values(%s,%s...)---->然后你要传数据到这个里面去࿰…...
![](https://www.oschina.net/img/hot3.png)
南通做网站优化公司/卡一卡二卡三入口2021
2019独角兽企业重金招聘Python工程师标准>>> 两段代码,首先是使用方法 CGContextRef context UIGraphicsGetCurrentContext();NSArray *colors [NSArray arrayWithObjects:[UIColor colorWithRed:225.0 / 255.0 green:225.0 / 255.0 blue:225.0 / 255…...
![](https://img-blog.csdnimg.cn/img_convert/9ff533f5cb514437b35f78d5e61035c1.gif)
南昌哪里网站建设专业/如何在百度发布短视频
Photon是一个由s0md3v开源的情报搜集爬虫,其主要功能有:1.爬取链接(内链、外链)。2.爬取带参数的链接,如(pythondict.com/test?id2)。3.文件(pdf, png, xml)。4.密钥(在前端代码中不小心被释放出来的)。5.js文件和Endpoint(spring中比较重要…...
![](/images/no-images.jpg)
门户网站排版/怎么去推广自己的平台
我试图运行/在我的vServer的安装码头工人,如果它甚至有可能无法找到的信息。我试过的CentOS(6 & 7),Ubuntu的,Debian和Fedora的现在,我只是不能让docker守护进程运行。在虚拟服务器上运行docker-可能与否?docker.s…...
![](/images/no-images.jpg)
做网站订单/推广普通话手抄报内容简短
OSD进程的启动停止:https://blog.csdn.net/bandaoyu/article/details/119894927 1. OSD概念 OSD:Object Storage Device,主要负责响应客户端请求返回具体数据的守护进程,一般一个集群会有多个OSD,每一块盘都会对应一个…...