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。

2022新媒体人必备的8大工具网站!收藏再看

工欲善其事必先利其器,今天Zion整理了新媒体人必须知道的八大工具网站,善用工具,方便大家随时随地提高工作效率!

内容干货满满,文末还有福利,建议收藏再看~

01.

秘塔写作猫

网址:https://xiezuocat.com/#/

秘塔写作猫是一款基于人工智能识别的一款写作助手,有比较强大的纠正错别字、语法错误等功能。同时支持谷歌浏览器扩展插件,安装插件后,可以检查邮件、文章、帖子……

新媒体工作者大部分是和文字打交道,最尴尬的事情莫过于,发出的文章出现错别字,有了这款神器,减少文字校对的工作量。

02.

Tooleyes

网址:https://www.tooleyes.com/

Tooleyes是一个免费的工具合集,不用下载,使用起来更方便。

Tooleyes收集了全网各种简单、易用、便捷的在线工具,包括生活常用、教育学习、办公辅助、图片视频、网络工具和程序开发等工具,各种工具应有尽有。

还有各类小众的工具,比如全球天气可视化预测工具。

03.

今日热榜

网址:https://tophub.today/

免去关注热点新闻,需要来回切换到不同网站或APP的麻烦,快速追踪全网热点,提供各站热榜聚合:微信、今日头条、百度、知乎、V2EX、微博、贴吧、豆瓣、天涯、虎扑、Github、抖音… 简单高效阅读。

04.

Fotor懒设计

网址:https://www.fotor.com.cn/

免去关注热点新闻,需要来回切换到不同网站或APP的麻烦,快速追踪全网热点,提供各站热榜聚合:微信、今日头条、百度、知乎、V2EX、微博、贴吧、豆瓣、天涯、虎扑、Github、抖音… 简单高效阅读。

05.

艾瑞媒体

网址:https://www.iresearch.cn/

做商业分析的时候,经常需要搜索行业和竞品信息、数据,而艾瑞网聚合了互联网数据资讯,融合互联网行业资源,提供电子商务、移动互联网、网络游戏、网络广告、网络营销等行业内容。

06.

考拉新媒体导航

网址:https://www.kaolamedia.com/

新媒体人的专属门户网站 :内嵌导航、功能齐全、海量素材、灵感来源。

07.

梅花网

网址:https://www.meihua.info/

在写文案的时候,不可避免地需要去写一下营销性的文案,但是有些时候写出来的文案却吸引不了我们的目标用户,怎么办呢?

很简单,看看别人是怎么写营销文案的。梅花网汇集了市面上热门的营销案例合集。

08.

Zion无代码

网址:https://www.functorz.com/

免费的小程序制作工具,非技术人员也可以迅速上手。

Zion作为⼀个所见即所得的专业级无代码应用开发及运营平台,基于自动代码生成技术,在无需工程师的参与下,非技术人员(产品经理、设计师等)就能够自主完成完整的跨平台产品的实现及迭代

Zion帮助用户不需要写任何一行代码就能通过可视化编辑器快速实现“设计+上线+维护+迭代”的完整开发生命周期。更快速度、更低成本地开发和运营高度定制化的跨平台应用。

(点击阅读全文,极速跳转,快速体验!)

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

点赞 0
收藏 0

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