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程序之前,需要具备以下基础条件:

  1. C#基础知识,ASP.NET Core MVC是基于.Net 进行开发的,所以掌握基本的C#相关内容是很有必要的。
  2. Html,JavaScript,CSS基础知识,是进行B/S模式系统开发必备内容。
  3. 开发工具【Visual Studio 2022】安装使用,可到官网进行下载安装包。

创建ASP.NET Core MVC程序

在Visual Studio 2022中,创建新项目,选择【ASP.NET Core Web应用(模型-视图-控制器)】模板,如下所示:

在【配置新项目】页面,输入项目名称,选择保存位置,然后点击【下一步】

 

 在【其他信息】页面,选择目前比较稳定的.NET 6.0(长期支持),然后点击【创建】按钮,如下所示:

由于是通过模板进行创建的项目,所以默认会创建基础的文件夹和示例,如下所示:

注意:基于.Net Framework和基于.Net Core创建的ASP.NET MVC项目,默认生成的文件和目录结构存在一些细微的差异:

  1. ASP.NET Core MVC的配置,是基于JSON格式进行配置的。如appsettings.json ,Properties\launchSettings.json 等。
  2. 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路由,如果是创建的空项目,则需要手动添加,主要由以下三行代码:

  1. 注入支持控制器视图服务。
  2. 使用路由
  3. 默认路由配置,可理解为缺省值配置

具体如下所示:

ASP.NET Core MVC的约定

在ASP.NET Core MVC中,流行【约定大于配置】的说法,即在同一个项目中,大家都按照同一种方式去开发,会使项目更易于维护,可读性更高,同时简化大量的配置,以提高工作效率。

ASP.NET Core MVC中的约定,体现如下:

  • 控制器的约定:
  1. 所有的Controller必须放到Controllers文件夹中,并以【名称+Controller】的方式命名,如:HomeController。
  2. 每个Controller都对应View中的一个文件夹,文件夹的名称跟Controller名相同,如:Home。
  3. Controller中的方法名都对应一个View视图(非必须,但是建议这么做)而且View的名字跟Action的名字相同。
  4. 控制器必须是非静态类,并且要实现IController接口,默认继承自Controller。
  5. Controller类型可以放到其他项目中
  •  视图的约定:
  1. 所有的视图必须放到Views目录下。
  2. 不同控制器的视图用文件夹进行分割,每个控制器都对应一个视图目录。
  3. 一般视图名字跟控制器的Action相对应(非必须)。
  4. 多个控制器公共的视图放到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其他内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/9710.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

字节跳动软件测试面试过了,起薪20k

普通二本计算机专业毕业&#xff0c;从毕业后&#xff0c;第一份接触测试的工作是在一家通讯小公司&#xff0c;大部分接触的工作是以功能测试为主&#xff0c;一直都是几千块钱工资&#xff0c;还一度被派出差&#xff0c;以及兼职各种产品、运维、运营的活&#xff0c;感觉自…

真1分钟搞懂缓存穿透、缓存击穿、缓存雪崩

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027

然后我们来看连接与关系部分 然后右键一个关系可以看他的配置 注意这个,如果添加多个关系,这里flowfile就会自动clone 然后可以看到连接的配置中有,flowfile过期时间配置,有back pressure 背压配置, 有负载均衡配置 这里的这个FlowFile Expiration是配置FlowFile在队列中的过期…

网络中的一些基本概念

组建网络的重要设备 集线器,交换机(组建局域网,不能跨局域网组建网络),路由器(wifi本质上是无线路由器,路由器的本质的把俩个局域网给连起来) 网络通信的一些基础概念 IP地址 标识了网络设备所在的位置 端口号 标识了一个具体的应用程序 协议 协议是网络通信的概念,约定好…

虹科案例 | 虹科Domo商业智能,助力保险公司逃离繁杂数据池!

金融行业的发展充满着不确定性&#xff0c;一个具备强大承保能力和精算专业知识的资金池&#xff0c;对于身处该领域的公司和个人都是十分必要的。 在全国城市联盟&#xff08;NLC&#xff09;的协助下成立的NCL Mutual会员制互助保险公司&#xff0c;为各个地区城市提供了稳定…

第13届蓝桥杯省赛真题剖析-2022年4月23日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第121讲。 第13届蓝桥杯省赛举办了两次&#xff0c;这是2022年4月23日举行的第二次省赛&#xff0c;比赛仍然采取线上形…

MySQL SQL性能分析 慢查询日志、explain使用

SQL执行频率 MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的insert、update、delete、delect的访问频次&#xff1a; -- session 是查看当前会话; -- global 是查询全局数…

paddle实现手写数字识别模型继续解读

要点&#xff1a; 手写数字识别用简单的线性进行分类效果比较差&#xff0c;添加卷积层和池化层效果会相对较好。参考文档&#xff1a;百度官方文档 一 网络结构 前几节我们尝试使用与房价预测相同的简单神经网络解决手写数字识别问题&#xff0c;但是效果并不理想。原因是手…

7.1 基本运放电路(1)

集成运放的应用首先表现在它能构成各种运算电路上&#xff0c;并因此而得名。在运算电路中&#xff0c;以输入电压作为自变量&#xff0c;以输出电压作为函数&#xff1b;当输入电压变化时&#xff0c;输出电压将按一定的数学规律变化&#xff0c;即输出电压反映输入电压某种运…

Msray-Plus采集工具帮您轻松获取目标受众的数据,让您的市场营销更加便捷

市场营销是企业推广产品和服务的重要手段之一&#xff0c;是企业获取客户和提高销售业绩的关键环节。然而&#xff0c;传统的市场营销方式存在着很多弊端&#xff0c;如缺乏数据支持、信息不准确、效率低下等问题&#xff0c;这些问题直接影响了企业的市场营销效果。而随着互联…

【Redis学习】Redis集群

理论简介 定义 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复制集只负责存储整个数据集的一部分&#xff0c;这就是Redis的集群&#xff0c;其作用是提供在多个Redis节东间共享数据的程序集。…

Python中的主函数

在Python代码中&#xff0c;我们常常看到主函数是以if __name__ __main__开头的&#xff0c;比如 它的原理是什么呢&#xff1f; 首先要知道&#xff0c;__name__是内置变量&#xff0c;用于表示当前模块的名字。在一个模块中运行以下语句&#xff0c;你会发现输出的是__main…

elasticsearch 核心概念

1.近实时&#xff08;Near Real Time,NRT&#xff09; elasticsearch 是一个近实时的搜索和分析平台&#xff0c;这意味着从索引文档到可搜索文档都会有一段微小的延迟&#xff08;通常是1s以内&#xff09;。这种延迟主要是因为 elasticsearch 需要进行数据刷新和索引更新。 …

基于目标级联法的微网群多主体分布式优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

餐饮店的运营需要考虑哪些方面

餐饮店的运营需要多方面的考虑和规划&#xff0c;以下是传递宝APP上一些常用的餐饮店运营方法&#xff1a; 1.定位&#xff1a;明确餐饮店的定位和目标客户群体&#xff0c;针对不同的客户需求&#xff0c;提供个性化的服务和产品&#xff0c;比如是附近的上班族&#xff0c;还…

Android:NDK

3.1 NDK 一、NDK的作用 &#xff08;1&#xff09;、NDK产生的背景   Android平台从诞生起&#xff0c;就已经支持C、C开发。众所周知&#xff0c;Android的SDK基于Java实现&#xff0c;这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三…

JVM 、JDK 、JRE都是什么意思?有什么区别?

摘自 JavaGuide &#xff08;「Java学习面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试&#xff0c;首选 JavaGuide&#xff01;&#xff09; JVM Java 虚拟机&#xff08;JVM&#xff09;是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实…

看完这个你就牛了,自动化测试框架设计

一、引言 随着IT技术的快速发展&#xff0c;软件开发变得越来越快速和复杂化。在这种背景下&#xff0c;传统的手工测试方式已经无法满足测试需求&#xff0c;而自动化测试随之而生。 自动化测试可以提高测试效率和测试质量&#xff0c;减少重复性的测试工作&#xff0c;从而…

AI绘画与虚拟人生成实践(一):生成人像,AI绘画模型和工具的效果对比

本篇的目的是生成一个虚拟的女生形象。先进入正题说明人像怎么生成,本篇使用到的工具和工具的介绍放在文末。 先来一波Midjourney生成的美图提升下大家学习的欲望 以上四张图使用的是相同的Prompt,如下: a beautiful chinese girl, 18 years old, detailed and big eye…

WorkPlus企业IM即时通讯私有化部署,从源头把控安全

数字中国战略不断推进&#xff0c;国家集中力量大力推动数字产业创新发展&#xff0c;各大企业纷纷加快了数字化转型步伐&#xff0c;数据安全保护的意识也不断提升。即时通讯办公平台作为高效沟通、协同工作的重要工具&#xff0c;在企业数字化转型中有着不可或缺的作用。所以…