.net Core Web 保姆级教学 逐文件讲解 从0搭建一个 ASP.NET Core Razor Pages

我们可以把整个项目比喻成一家餐厅的运作体系


第一步:先看项目结构(以默认模板为例)

当你通过 Visual Studio 或 dotnet new webapp 命令创建一个新项目后,会看到类似下面的文件夹和文件(不同版本可能略有差异,但核心一致):

你的项目名称/ │ ├── 📁 Properties/ │ └── launchSettings.json (配置文件:启动按钮的设置) │ ├── 📁 wwwroot/ (餐厅的"公共用餐区":存放浏览器能直接访问的静态文件) │ ├── 📁 css/ (样式文件 - 餐厅的装修风格) │ ├── 📁 js/ (JavaScript文件 - 服务员的现场互动) │ └── 📁 lib/ (第三方库 - 比如借来的桌椅餐具) │ ├── 📁 Pages/ (餐厅的"核心包间区":所有网页都在这里) │ ├── 📁 Shared/ (公共组件:每个包间都有的墙壁、菜单样式) │ │ └── _Layout.cshtml (网页的"骨架":定义页眉、页脚、导航栏) │ │ └── _ValidationScriptsPartial.cshtml (脚本片段:用于表单验证) │ │ │ ├── Index.cshtml (首页:比如餐厅的入口大厅) │ ├── Index.cshtml.cs (首页的"专属服务员":处理首页的后台逻辑) │ ├── Privacy.cshtml (隐私政策页) │ └── Privacy.cshtml.cs (隐私页的专属服务员) │ ├── 📁 bin/ 和 📁 obj/ (厨房后厨:编译生成的临时文件和最终输出,一般不用管) │ ├── appsettings.json (餐厅的"规章制度手册":数据库连接、应用配置) ├── appsettings.Development.json (开发环境专用的规章制度) ├── Program.cs (餐厅的"总设计师+总指挥":应用的入口和启动配置) └── 项目名称.csproj (餐厅的"购物清单":项目依赖的包和SDK) 

第二步:详细讲解每个核心文件

1. Program.cs —— 餐厅的"总设计师+总指挥"

这是整个项目最先运行的地方,相当于你进入餐厅前,设计师画好蓝图、老板搭好骨架。

// 这是创建一个默认的Web应用构建器,相当于开始搭建餐厅var builder = WebApplication.CreateBuilder(args);// 告诉餐厅:我们使用Razor Pages模式营业// 这会在系统中注册所有必要的服务,比如把"页面文件(.cshtml)"和"服务员(.cshtml.cs)"关联起来 builder.Services.AddRazorPages();// 搭建完成,餐厅开始营业var app = builder.Build();// 配置HTTP请求管道:相当于设定客人进门后的路线if(!app.Environment.IsDevelopment()){ app.UseExceptionHandler("/Error");// 如果出错了,带客人去错误处理页面 app.UseHsts();// 强制使用HTTPS安全连接} app.UseHttpsRedirection();// 把所有HTTP请求自动跳转到HTTPS(更安全) app.UseStaticFiles();// 允许客人访问 wwwroot 文件夹里的静态文件(图片、CSS) app.UseRouting();// 启动路由系统:根据客人访问的URL,决定带他去哪个包间 app.MapRazorPages();// 关键步骤:把所有Razor Pages映射到路由中// 比如访问 "/Index" 就去找 Index.cshtml app.Run();// 餐厅开始正式营业,监听客人请求
2. Pages 文件夹 —— 餐厅的"核心包间区"

这里存放所有 .cshtml 文件,每个文件代表网站的一个具体页面

2.1 _Layout.cshtml (在Shared文件夹中) —— 网页的"骨架"

这个文件定义了所有页面的公共部分,比如:

  • 整个网站的头部(Logo、导航菜单)
  • 底部(版权信息)
  • 全局CSS和JS引用
<!DOCTYPEhtml><html><head><!-- 这里的 @RenderSection("Head", ...) 是个占位符 --><linkrel="stylesheet"href="~/css/site.css"/></head><body><header>这里是导航栏</header><!-- 最关键的部分:页面主体内容会渲染在这里 --> @RenderBody() <footer>版权所有</footer> @await RenderSectionAsync("Scripts", required: false) </body></html>

其他页面(如Index.cshtml)只负责写自己独有的内容,最终会被塞进 @RenderBody() 的位置。

2.2 Index.cshtmlIndex.cshtml.cs —— 一对一的"包间+服务员"

这是Razor Pages的精髓,一个页面由一对文件组成。

Index.cshtml.cs (页面模型/逻辑):处理页面的后台逻辑。

usingMicrosoft.AspNetCore.Mvc.RazorPages;publicclassIndexModel:PageModel// 继承PageModel{publicstring CurrentTime {get;set;}// 当用户通过GET方式访问页面时(比如直接在浏览器输入网址),这个方法会被执行publicvoidOnGet(){ CurrentTime = DateTime.Now.ToString();}// 当用户通过POST方式提交表单时,这个方法会被执行publicvoidOnPost(){ CurrentTime ="你刚刚点了提交按钮!";}}

这里要特别注意.cshtml.cs 文件的名字必须和 .cshtml 一样,并且放在同一个文件夹下。

Index.cshtml (视图/界面):就是你在浏览器里看到的HTML代码,可以混合C#代码。

@page // 第一行必须是@page,标记这是一个Razor Page @model IndexModel // 关联到下面的IndexModel类 <h1>欢迎</h1><p>当前时间是: @Model.CurrentTime</p><formmethod="post"><buttontype="submit">点我提交</button></form>
3. wwwroot 文件夹 —— 餐厅的"公共用餐区"

这是唯一一个浏览器可以直接访问的文件夹。存放:

  • css/site.css:整个网站的样式表(字体、颜色、布局)。
  • js/site.js:你自己写的JavaScript代码(弹窗、动画)。
  • lib/:第三方的库,比如jQuery、Bootstrap。
4. appsettings.json —— 餐厅的"规章制度手册"

存放配置信息,比如:

{"Logging":{...},// 日志记录级别(错误信息记多细)"ConnectionStrings":{"DefaultConnection":"数据库连接字符串"// 数据库地址和账号},"AllowedHosts":"*"// 允许哪些域名访问}
5. launchSettings.json (在Properties文件夹里) —— 调试模式的"开关面板"

当你按F5启动项目时,Visual Studio 会读这个文件。它定义了:

  • 用什么浏览器打开?
  • 打开哪个URL?(https://localhost:5001)
  • 是否自动打开窗口?

第三步:一次完整的请求流程(帮你串起来)

为了让你理解这些文件如何协同工作,我们模拟一次访问首页的过程:

  1. 启动:你按F5,Program.cs 开始运行,配置好所有服务。
  2. 请求:你在浏览器输入 https://localhost:5001/
  3. 路由app.MapRazorPages() 根据URL / 找到 Pages/Index.cshtml 文件。
  4. 执行逻辑:系统自动创建 IndexModel 类的实例(Index.cshtml.cs),并执行其中的 OnGet() 方法。
  5. 渲染页面:系统读取 _Layout.cshtml 作为骨架,把 Index.cshtml 生成的HTML内容填进 @RenderBody() 的位置。
  6. 返回:最终生成一个完整的HTML页面,返回给浏览器。
  7. 浏览器显示:浏览器解析HTML,并根据 wwwroot/css/site.css 的样式,把页面渲染得漂漂亮亮。

Read more

文心一言和通义千问大模型

序号 考察能力 题目 回复 评价 1 逻辑推理 一个人带一只黄狗、一只白兔和一颗白菜过河,河边只有一条小船,此人每次只能带一样东西过河,如果此人不在,黄狗要咬白兔,白兔要啃白菜。请想一想:既不让黄狗咬白兔,又不让白兔啃白菜,该怎么设计过河方案 1. 文心一言大模型: 2. 第一步:人带着白兔过河,然后人独自返回。此时河对岸只有白兔,这边剩下黄狗和白菜,两者不会互相影响。第二步:人带着黄狗过河,到达对岸后,带着白兔返回。若不带走白兔,黄狗会咬白兔,所以必须将白兔带回来;此时河对岸只有黄狗,这边有白兔和白菜。第三步:人带着白菜过河,然后人独自返回。此时河对岸是黄狗和白菜,两者不会互相影响,这边只剩下白兔。第四步:人带着白兔过河。 3. 4. 通义千问大模型: 5. ・带兔过河(左→

深度解析 GitHub Copilot Agent Skills:如何打造可跨项目的 AI 专属“工具箱”

前言 随着 GitHub Copilot 从单纯的“代码补全”工具向 Copilot Agent(AI 代理) 进化,开发者们迎来了更高的定制化需求。我们不仅希望 AI 能写代码,更希望它能理解团队的特殊规范、掌握内部工具的使用方法,甚至在不同的项目中复用这些经验。 Agent Skills(代理技能) 正是解决这一痛点的核心机制。本文将深入解析 Copilot Skills 的工作原理,并分享如何通过软链接(Symbolic Link)与自动化工作流,构建一套高效的个人及团队知识库。 一、 什么是 Agent Skills? 如果说 Copilot 是一个通用的“AI 程序员”,那么 Skill(技能) 就是你为它配备的专用工具箱。 它不仅仅是一段简单的提示词(Prompt),而是一个包含元数据、指令和执行资源的标准文件夹结构。当

解决下载慢问题:国内可用的Stable Diffusion和LLaMA模型镜像站清单

国内可用的Stable Diffusion和LLaMA模型镜像站清单:高效解决下载慢问题 在AI生成内容(AIGC)迅速普及的今天,越来越多开发者、设计师和研究人员开始尝试本地部署Stable Diffusion或微调LLaMA这类大模型。但一个现实问题始终困扰着国内用户——模型下载太慢了。 你有没有经历过这样的场景?打开Hugging Face准备下载一个7GB的SDXL基础模型,进度条爬得比蜗牛还慢,半小时才下完一半,结果网络一断,前功尽弃。更别提训练LoRA时需要频繁拉取不同版本的基础权重,这种体验简直让人崩溃。 这背后的原因并不复杂:主流模型大多托管在境外平台(如Hugging Face、Replicate),而原始文件动辄数GB甚至数十GB,加上跨境链路不稳定、DNS污染、限速等问题,直接导致国内直连下载效率极低,严重拖慢了从环境搭建到实际训练的整体节奏。 好在社区早已意识到这个问题,并催生出一批高质量的国内模型镜像站点。它们通过在国内服务器缓存常用模型文件,提供HTTPS加速链接,极大提升了获取效率。配合LoRA这类轻量化微调技术,如今我们完全可以在消费级显卡上完成

【机器人编队】基于matlab A_Satr算法多机器人分布式动态避障领袖跟随者(含EKF)【含Matlab源码 14888期】

【机器人编队】基于matlab A_Satr算法多机器人分布式动态避障领袖跟随者(含EKF)【含Matlab源码 14888期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥 ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进; 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab路径规划仿真内容点击👇 ①Matlab路径规划(进阶版) ②付费专栏Matlab路径规划(初级版) ⛳️关注ZEEKLOG海神之光,更多资源等你来!! ⛄一、全自主差动驱动移动机器人复杂环境中动态路径跟踪和实时障碍物规避 1 动态路径跟踪方法 差动驱动机器人的运动学模型可描述为: { x ˙ = v cos ⁡ θ y ˙ = v sin ⁡ θ θ ˙ = ω \begin{cases} \dot{x} = v \cos \theta \\ \dot{y} = v \sin \theta \\ \dot{\theta} = \omega \end{