C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)

本章介绍如何使用 ASP.NET Core 在服务器端构建具有现代 HTTP 架构的网站。

ASP.NET Core 是一个由微软开发的免费、开源和跨平台的 web 框架,用于构建现代、基于云和互联网连接的应用程序。它是对之前的 ASP.NET 框架的重大重新设计,专注于灵活性、模块化和性能。

ASP.NET Core 提供了一个统一的编程模型,用于构建 Web 用户界面 (UI) 和 Web API,这意味着您可以使用相同的框架来处理服务器端和客户端逻辑。

ASP.NET Core 针对高性能进行了优化,能够处理大量的每秒请求。它具有轻量级的模块化架构,允许开发人员仅包含必要的组件,从而减少整体占用。

您将学习如何使用 ASP.NET Core 8 中引入的 Blazor 静态服务器端渲染 (SSR) 功能构建简单的网站。

本章涵盖以下主题:

  • 探索 ASP.NET Core
  • Blazor 的历史
  • 探索 Blazor 静态 SSR
  • 使用 Entity Framework Core 和 ASP.NET Core

在我们探索一个示例 ASP.NET Core 项目之前,让我们回顾一下它的架构。

ASP.NET Core 的架构由几个关键组件组成:

  • 中间件:中间件组件用于处理请求和响应。它们在管道中串联在一起,每个中间件处理请求并将其传递给链中的下一个组件。在本章的可选在线部分中,您可以学习如何自定义此管道。
  • 路由:路由组件负责将传入请求映射到适当的端点和 Blazor 组件。
  • 依赖注入(DI)容器:这是内置的,用于管理服务对象的生命周期和依赖关系。
  • 配置:ASP.NET Core 使用灵活的配置系统,支持多种来源,如 JSON 文件、环境变量和命令行参数。
  • 日志记录:该框架具有一个日志记录 API,支持多种日志提供程序,允许您以一致的方式捕获和存储日志数据。

现在我们将创建一个空的 ASP.NET Core 项目,并探索如何使其能够提供简单的网页。

我们将创建一个 ASP.NET Core 项目,该项目将显示来自 Northwind 数据库的供应商列表。

dotnet 工具有许多项目模板,可以为您完成很多工作,但很难知道哪种模板最适合特定情况,因此我们将从空网站项目模板开始,然后逐步添加功能,以便您可以理解所有部分:

  1. 使用您首选的代码编辑器打开 ModernWeb 解决方案,然后添加一个新项目,如下列表所定义:
  2. 项目模板:ASP.NET Core 空项目 [C#] / web 。对于 Rider,选择名为 ASP.NET Core Web 应用程序的项目模板,然后将类型设置为空。
  3. 项目文件和文件夹: Northwind.Web
  4. 解决方案文件和文件夹: ModernWeb
  5. 对于 Visual Studio,保持所有其他选项为默认设置。
  6. 例如:
  7. 框架:.NET 9.0(标准术语支持)
  8. 配置为 HTTPS:已选择
  9. 启用 Docker:已清除
  10. 请勿使用顶级语句:已清除
  11. 对于 VS Code 和 dotnet new web 命令,默认选项是我们想要的。在未来的项目中,如果您想从顶级语句更改为旧的 Program 类样式,请指定开关 –use-program-main

在创建新项目时,Visual Studio 和 dotnet new 选项的摘要可以在以下链接的 GitHub 仓库中找到:https://github.com/markjprice/cs13net9/blob/main/docs/ch01-project-options.md。

  1. 构建 Northwind.Web 项目。
  2. Northwind.Web.csproj 中,请注意该项目类似于类库,只是 SDK 是 Microsoft.NET.Sdk.Web ,如下标记中所示:

添加一个元素以全局和静态方式导入 System.Console 类,如下所示的标记:

  1. 如果您使用的是 Visual Studio,请在解决方案资源管理器中切换显示所有文件。如果您使用的是 Rider,请将光标移动到解决方案窗格上,然后点击“眼球”图标。
  2. 展开 obj 文件夹,展开 Debug 文件夹,展开 net9.0 文件夹,并选择 Northwind.Web.GlobalUsings.g.cs 文件。请注意,隐式导入的命名空间包括控制台应用程序或类库的所有命名空间,以及一些 ASP.NET Core 的命名空间,例如 Microsoft.AspNetCore.Builder ,如下代码所示:
  1. 关闭文件并折叠 obj 文件夹。
  2. Northwind.Web 项目/文件夹中,展开名为 Properties 的文件夹,打开名为 launchSettings.json 的文件,并注意名为 httphttps 的配置文件。它们有随机分配的端口号,您将在下一步中更改,因此现在只需记下它们的位置,如以下配置中所示的高亮部分:

launchSettings.json 文件仅在开发期间使用。它对构建过程没有影响。它不会与编译后的网站项目一起部署,因此对生产运行时没有影响。它仅被像 Visual Studio 和 Rider 这样的代码编辑器处理,以设置环境变量并定义项目在代码编辑器启动时供 Web 服务器监听的 URL。

  1. 对于 https 配置文件,对于其 applicationUrl ,将 http 的分配端口号更改为 5130 ,将 https 更改为 5131 ,并交换顺序,使 http 在列表中排在第一位,并将作为默认使用,如以下标记中所示:

httphttps 启动配置文件具有 commandNameProject ,这意味着它们使用项目中配置的网络服务器来托管网站,默认情况下是 Kestrel。还有一个用于 IIS 的配置文件和设置,IIS 是仅限 Windows 的网络服务器。在本书中,我们将仅使用 Kestrel 作为网络服务器,因为它是跨平台的。为了简化您的 launchSettings.json 文件,您甚至可以删除 iisSettingsIIS Express 部分。

  1. 将更改保存到 launchSettings.json 并关闭文件。
  2. Program.cs 中,请注意以下事项:一个 ASP.NET Core 项目就像一个顶级控制台应用程序,具有一个隐藏的 <Main>$ 方法作为其入口点,该方法使用名称 args 传递一个参数。它调用 WebApplication.CreateBuilder ,该函数使用默认的网络主机创建网站的主机,然后进行构建。该网站将对所有 HTTP GET 请求以该网站的根路径响应以下纯文本: Hello World! 。对 Run 方法的调用是一个阻塞调用,因此隐藏的 <Main>$ 方法在 web 服务器停止运行之前不会返回。

Program.cs 的内容在以下代码中显示:

在现有对 MapGet 的调用后,添加两个调用以定义一个返回匿名 C# 对象作为 JSON 的端点,以及一个返回网页的端点,如以下代码所示:

除了 JsonContentResults 类还有许多其他方法,如 BadRequestBytesCreatedFileNoContentNotFoundOkProblemRedirect 等。您可以在以下链接了解更多信息:https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.results。

  1. Program.cs 的底部,添加一个注释以解释 Run 方法,并在 Run 之后写一条消息到控制台,因此,在网络服务器停止后,如以下代码中突出显示的内容所示:

我们现在将测试 ASP.NET Core 空网站项目的功能。我们还将通过将 HTTP 切换到 HTTPS 来启用浏览器与 Web 服务器之间所有流量的加密,以保护隐私。HTTPS 是 HTTP 的安全加密版本。

  • 对于 Visual Studio:在工具栏中,确保选择了 https 配置文件(而不是 http、IIS Express 或 WSL),然后将 Web 浏览器更改为 Google Chrome,如图 13.1 所示:

图 13.1:在 Visual Studio 中选择带有 Kestrel Web 服务器的 https 配置文件

  1. 导航到 调试 | 无调试启动….
  2. 在 Windows 中,如果您看到 Windows 安全警报,提示 Windows Defender 防火墙已阻止此应用程序的一些功能,请点击允许访问按钮。
  3. 第一次启动安全网站时,您可能会收到通知,您的项目已配置为使用 SSL,为了避免浏览器中的警告,您可以选择信任 ASP.NET Core 生成的自签名证书。点击“是”。当您看到安全警告对话框时,再次点击“是”。
  • 对于 VS Code,输入命令以 https 配置文件启动项目,如下所示: dotnet run –launch-profile https 。然后启动 Chrome。
  • 对于骑手:导航到 运行 | 编辑配置….在运行/调试配置对话框中,选择 Northwind.Web: https。在对话框底部,位于“启动后”复选框的右侧,选择 Chrome,然后点击确定。导航到 运行 | 运行 ‘Northwind.Web: https’
  1. 在 Visual Studio 的命令提示符窗口或 VS Code 的终端中,请注意以下内容,如下输出所示:网络服务器已开始监听我们为 HTTP 和 HTTPS 分配的端口。您可以按 Ctrl + C 关闭 Kestrel Web 服务器。托管环境是 Development

Visual Studio 还会自动启动您选择的浏览器并导航到第一个 URL。如果您使用的是 VS Code,您需要手动启动 Chrome。

  1. 在命令提示符或终端中保持 Kestrel web 服务器运行。
  2. 在 Chrome 中,显示开发者工具,然后点击网络标签。
  3. 请求网站项目的主页:如果您使用的是 Visual Studio,并且 Chrome 自动启动并已为您输入了 URL,请单击“重新加载此页面”按钮或按 F5。如果您正在使用 VS Code 和命令提示符或终端,则在 Chrome 地址栏中手动输入地址 http://localhost:5130/
  4. 在网络选项卡中,点击 localhost,并注意响应是来自跨平台 Kestrel web 服务器的纯文本 Hello World!,如图 13.2 所示:

图 13.2:网站项目的纯文本响

像 Chrome 这样的浏览器可能还会请求一个 favicon.ico 文件以在其浏览器窗口或标签中显示,但该文件在我们的项目中不存在,因此显示为 404 Not Found 错误。如果这让你感到烦恼,你可以在以下链接免费生成一个 favicon.ico 文件并将其放入项目文件夹中:https://favicon.io/。在网页中,你还可以在元标签中指定一个,例如,使用 Base64 编码的空白文件,如以下标记所示:

<link rel=\”icon\” href=\”data:;base64,iVBORw0KGgo=\”>

  1. 输入地址 https://localhost:5131/ ,请注意,如果您没有使用 Visual Studio 或在被提示信任 SSL 证书时点击了“否”,那么响应将是隐私错误。当您没有配置浏览器可以信任的证书以加密和解密 HTTPS 流量时,您将看到此错误(如果您没有看到此错误,那是因为您已经配置了证书)。在生产环境中,您可能希望向像 Verisign 这样的公司支付 SSL 证书费用,因为他们提供责任保护和技术支持。在开发过程中,您可以告诉您的操作系统信任 ASP.NET Core 提供的临时开发证书。

Visual Studio 还会自动启动您选择的浏览器并导航到第一个 URL。如果您使用的是 VS Code,您需要手动启动 Chrome。

  1. 输入地址 https://localhost:5131/data 并注意返回了一些 JSON。
  2. 输入地址 https://localhost:5131/welcome 并注意返回了一个网页。
  3. 在命令提示符或终端中,按 Ctrl + C 关闭网络服务器,并注意写入的消息,如以下输出中突出显示的内容:
  1. 如果您需要信任本地自签名的 SSL 证书,请在命令行或终端中输入以下命令: dotnet dev-certs https –trust
  2. 注意消息请求信任 HTTPS 开发证书。您可能会被提示输入密码,并且可能已经存在有效的 HTTPS 证书。

启用更严格的安全性并自动将 HTTP 请求重定向到 HTTPS 是一种良好的做法。

良好实践:一个可选但推荐的安全增强是 HTTP 严格传输安全(HSTS),您应该始终启用它。如果一个网站指定了它并且浏览器支持它,那么它会强制所有通信通过 HTTPS 进行,并防止访问者使用不受信任或无效的证书。

现在就来做吧:

  1. Program.cs 中,在构建 app 的语句之后,添加一个区域和一个 if 语句,以在非开发环境中启用 HSTS,并将 HTTP 请求重定向到 HTTPS,如以下代码中突出显示的内容所示:
  1. 使用 https 启动配置启动 Northwind.Web 网站项目而不进行调试。
  2. 如果 Chrome 仍在运行,请关闭并重新启动它。
  3. 在 Chrome 中,显示开发者工具,然后点击网络标签。
  4. 输入地址 http://localhost:5130/ ,并注意服务器如何以 307 临时重定向响应到 https://localhost:5131/ ,以及证书是有效且受信任的,如图 13.3 所示:

图 13.3:连接现在使用有效证书和 307 重定向进行安全保护

  1. 关闭 Chrome 并关闭网络服务器。

良好实践:记得在完成网站测试后,通过切换到命令提示符或终端并按 Ctrl + C 来关闭 Kestrel 网络服务器。

在 ASP.NET Core 5 及更早版本中,项目模板设置了一条规则,表示在开发模式下,任何未处理的异常将在浏览器窗口中显示,以便开发人员查看异常的详细信息,如以下代码所示:

使用 ASP.NET Core 6 及更高版本,此代码由 WebApplication 构建器默认配置,因此会自动执行,因此在项目模板 Program.cs 源代码中不再需要。

ASP.NET Core 如何知道我们何时在开发模式下运行,以便 IsDevelopment 方法返回 true ,并且这段额外代码执行以设置开发者异常页面?让我们来看看。

ASP.NET Core 可以从设置文件和环境变量中读取,以确定使用哪个托管环境,例如 DOTNET_ENVIRONMENTASPNETCORE_ENVIRONMENT

您可以在本地开发期间覆盖这些设置:

  1. Northwind.Web 文件夹中,展开名为 Properties 的文件夹,并打开名为 launchSettings.json 的文件。请注意, https 启动配置将托管环境的环境变量设置为 Development ,如下所示在以下配置中突出显示:
  1. ASPNETCORE_ENVIRONMENT 环境变量从 Development 更改为 Production
  2. 如果您正在使用 Visual Studio,可以选择将 launchBrowser 更改为 false 以防止 Visual Studio 自动启动浏览器。当您使用 dotnet run 或 Rider 启动网站项目时,此设置将被忽略。
  3. Program.cs 中,将第一个 MapGet 语句修改为返回环境的名称,而不是 Hello World ,如下代码中所示的高亮部分:

使用 https 启动配置启动网站项目,并注意托管环境为 Production ,如下所示的输出:

  1. 在 Chrome 中,请注意纯文本是 Environment is Production
  2. 关闭网络服务器。
  3. launchSettings.json 中,将环境变量更改回 Development ,并将更改保存到文件中。

更多信息:您可以通过以下链接了解有关环境的更多信息:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments。

轻松搭建自己的短网址平台-Shortny v2.0.1源码搭建教程

短网址(Short URL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。

网址缩短这种服务是在微博出现之后才流行开来的,原因很简单,微博140字限制,能表达的内容本来就两三句,如果再出现一个网址,就会占用非常大的篇幅。

网址缩短的原理也很简单,使用HTTP 301 Moved状态码重定向,浏览器就会自动的转向到目标网址。这个实现起来的难度不大,代价也不会很高。因为多了这一次转发,这使得那些被传播的网址多了一些可控的因素,比如说可以记录请求的报文,对来源网站、IP、浏览器等许多信息进行收集和统计;可以针对有害网站进行跳转前的过滤和警告。这样子,一个连接投放出去之后的效果就可以很方便的统计。

其实网址缩短的网站遍地都是。但大多数都不支持后台短网址链接数据的修改。当你活动地址或是活动链接更改了以后,你不得不重新发布新的消息或是链接让大家知晓!当然有很多短网址也支持后台数据修改,但基本上都是VIP的功能,而且隐私性也不强,数据都保存在别人那里。

所以大飛果断的申请了一个免费域名,搭建一个属于自己的短网址平台,方便维护管理给大家分享资源时的链接。

Shortny是一款国外的PHP短网址源码,程序非常小巧,但是功能是很多的,支持自定义后缀、加密访问,查看链接统计,而且还支持放广告,这个广告功能相信有些人会喜欢。界面也比较好看,支持白天/夜晚切换模式。由于官方的程序是收费的,所以这里大飛提供的是由顶点网提供的用于学习和研究的版本Shortny v2.0.1,顺便说下详细安装过程。

本源码具有以下特色:

前端: 简洁、优雅、反应灵敏的设计、创建URL、创建自定义URL、密码保护的链接、链接统计、暗色主题、小书签、复制和共享链接;

后端: 删除网址、编辑网站设置、添加或编辑广告、分析、使用自定义CSS;

功能: 垃圾邮件检查器、所有输入都经过验证以进行保护、安全支护板、命中计数;

网盘下载一 :fhyurl.tk/kMc47

网盘下载二 :fhyurl.tk/WnAVA

1、安装环境

环境要求:PHP、Mysql、Nginx/Apache,搭建方法自行选择,这里使用宝塔演示。

  • Apache,nginx,IIS或lighttpd(首选Apache)(大飛这个教程是使用nginx搭建)
  • PHP> = 5.5.9
  • MariaDB或MySQL> = 5.5,或者使用SQLite

以上说了那么多,其实都是废话,服务器要求不用看,你安装好宝塔面板基本就完事了。

首先安装BT面板

安装要求:

内存:512M以上,推荐768M以上(纯面板约占系统60M内存)

硬盘:300M以上可用硬盘空间(纯面板约占20M磁盘空间)

系统:CentOS 7.1+ (Ubuntu16.04+.、Debian9.0+),确保是干净的操作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL/pgsql/gitlab/java(已有环境不可安装)

架构:x86_64(主流服务器均是此架构),ARM不完整兼容(面板环境安装慢,部分软件可能安装不上)

安装完成后,进入面板,点击左侧软件管理,然后安装PHP、Nginx或Apache、Mysql。

在宝塔面板里面添加站点,绑定域名,并创建数据库(这个不会就别往下看了~~)

点击面板左侧-添加站点,数据库选择Mysql,设置好数据库名称、密码。

然后上传源码到网站根目录并解压出来。

#Apache,编辑.htaccess文件,将本地地址修改成自己的域名,比如:

#Nginx,点击域名设置-伪静态,然后将下面例子的域名改成自己的,再复制进去,比如:

最后开始安装,由于伪静态问题,只能通过具体路径安装,链接如下:

安装完成后,即可登录后台管理界面进行设置,默认用户名和密码均为admin。

如果看完文字教程依然一头雾水,请关注我的频道,针对本期教程的视频正在制作中,包括后台设置首页广告及跳转广告的代码如何填写等,敬请期待!

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。