ASP.NET 是由 Microsoft 开发的 Web 应用程序框架,作为 .NET 框架的一部分发布。它使构建动态 Web 应用程序变得容易。其他一些类似 Web 应用程序框架的示例包括 Ruby on Rails (Ruby)、Django (Python) 和 Express (JavaScript)。
ASP.NET Core 是一个跨平台、高性能、开源的Web 应用程序框架。Microsoft 于 2016 年发布了 ASP.NET Core 的第一个版本。它使开发人员能够创建现代的、支持云的应用程序。
- 跨平台: ASP.NET Core 的主要优点是它不像传统的 ASP.NET 框架那样绑定到 Windows 操作系统。你可以在 Linux 或 Mac 上开发和运行生产就绪的 ASP.NET Core 应用程序。
- 高性能:它从头开始设计,牢记性能。它现在是最快的 Web 应用程序框架之一。
- 开源:最后,它是开源的,并且由全世界成千上万的开发人员积极贡献。
ASP.NET 和 ASP.NET Core 都在C#上运行,C#是一种面向对象的通用编程语言。ASP.NET Core 从其 ASP.NET 传统中继承了许多概念和功能,但从根本上说它是一个新框架。
尽管 Microsoft 将支持旧版 ASP.NET 框架,但它不会积极开发它。新的 ASP.NET Core 框架将包括所有新功能和增强功能。展望未来,Microsoft 建议开发人员使用 ASP.NET Core 而不是旧的 ASP.NET 框架构建所有新的 Web 应用程序。
ASP.NET常见面试题有哪些?在本文中,我们将重点讨论 ASP.NET 和 ASP.NET Core 面试问题。为了限制本文的范围,我们假设你已经使用 C# 编程语言进行了编程。还需要对常见的面向对象概念和前端技术(如 HTML、CSS 和 JavaScript)有基本的了解。
我们将面试问题分为两个部分。基本面试问题涵盖基础知识,重点是了解基本 ASP.NET 项目的应用程序结构。然后,我们将在高级面试问题中介绍更高级的概念,例如依赖项注入、路由和模型绑定。
基本的ASP.NET常见面试题和答案合集
1. 什么是网络应用程序?
Web 应用程序是用户可以通过 Web 浏览器(例如 Chrome 或 Firefox)访问的软件。浏览器向 Web 应用程序的特定 URL 发出 HTTP 请求。Web 应用程序服务器拦截并处理请求以构建发送给用户的动态 HTML 响应。一些流行的 Web 应用程序示例包括 StackOverflow、Reddit、Google 等。
Web 应用程序不同于典型的网站。网站是静态的。当你访问该网站时,它会返回一个 HTML 页面,而无需进行任何处理来构建该 HTML 页面的内容。如果你重新加载浏览器,你将看到相同的页面。相比之下,Web 应用程序可能会在你每次访问时返回不同的响应。
例如,假设你在 Stack Overflow 上提问。最初,你在访问 URL 时只会看到你的问题。但是,如果其他用户回答了你的问题,浏览器将在你下次访问同一 URL 时显示该回答。
Web 应用程序由多个独立的层组成。典型的例子是由表示层、业务层和数据层组成的三层架构。例如,浏览器(演示文稿)与应用程序服务器通信,后者与数据库服务器通信以获取请求的数据。
下图说明了一个典型的 Web 应用程序架构,其中包含按不同关注领域分组的标准组件。
2.什么是Web应用程序框架,它的好处是什么?
ASP.NET面试题解析:学习构建现代 Web 应用程序可能令人生畏。大多数 Web 应用程序都有一组标准的功能,例如:
- 构建对应于 HTTP 请求的动态响应。
- 允许用户登录应用程序并管理他们的数据。
- 将数据存储在数据库中。
- 处理数据库连接和事务。
- 将 URL 路由到适当的方法。
- 支持会话、cookie 和用户授权。
- 格式化输出(例如 HTML、JSON、XML),并提高安全性。
框架可帮助开发人员编写、维护和扩展应用程序。它们提供了工具和库来简化上述重复性任务,消除许多不必要的复杂性。
3. 与经典的 ASP.NET 相比,ASP.NET Core 有哪些优势?
- 跨平台: ASP.NET Core 的主要优点是它不像传统的 ASP.NET 框架那样绑定到 Windows 操作系统。你可以在 Linux 或 Mac 上开发和运行生产就绪的 ASP.NET Core 应用程序。选择像 Linux 这样的开源操作系统可以显着节省成本,因为你无需为 Windows 许可证付费。
- 高性能:它也是从头开始设计,牢记性能。它现在是最快的 Web 应用程序框架之一。
- 开源:最后,它是开源的,并且由全世界成千上万的开发人员积极贡献。所有源代码都托管在 GitHub 上,供任何人查看、更改和回馈。尽管全世界的贡献者为框架添加了补丁、错误修复和改进,但它已经为 Microsoft 带来了巨大的善意和信任。
- 新技术:借助 ASP.NET Core,除了传统的模型-视图-控制器方法之外,你还可以使用 Razor Pages 和 Blazor 等新技术开发应用程序。
4. 你什么时候选择经典的 ASP.NET 而不是 ASP.NET Core?
尽管它在几乎所有方面都是更好的选择,但如果你正在维护一个你满意且不再积极开发的旧版 ASP.NET 应用程序,则不必切换到 ASP.NET Core。
如果你符合以下条件,ASP.NET MVC 是更好的选择:
- 不需要为你的 Web 应用程序提供跨平台支持。
- 需要一个稳定的工作环境。
- 有更近的发布时间表。
- 已经在开发现有应用程序并扩展其功能。
- 已经拥有一支具有 ASP.NET 专业知识的现有团队。
5. 解释一下 HTTP 协议是如何工作的?
超文本传输协议 (HTTP) 是一种用于传输超媒体文档(例如 HTML)的应用层协议。它处理 Web 浏览器和 Web 服务器之间的通信。HTTP 遵循经典的客户端-服务器模型。客户端(例如 Web 浏览器)打开连接以发出请求,然后等待直到收到来自服务器的响应。
HTTP 是一种允许获取资源(例如 HTML 文档)的协议。它是 Web 上任何数据交换的基础,它是一种客户端-服务器协议,这意味着请求是由接收者发起的,通常是 Web 浏览器。
6. 什么是网络服务器?
术语 Web 服务器可以指单独或一起工作的硬件或软件。
在硬件方面,Web 服务器是具有更多处理能力和内存的计算机,用于存储应用程序的后端代码和静态资产,例如图像和 JavaScript、CSS、HTML 文件。这台计算机连接到互联网,并允许连接设备之间的数据流动。
在软件方面,Web 服务器是一个程序,它接受来自客户端的 HTTP 请求,例如 Web 浏览器,处理请求并返回响应。响应可以是静态的,即图像/文本,也可以是动态的,即购物车的计算总数。
Web 服务器的流行示例包括 Apache、Nginx、IIS。
7.什么是MVC模式?
模型-视图-控制器 (MVC) 是一种架构模式,它将应用程序分为三个主要逻辑组件:模型、视图和控制器。值得注意的是,这种模式与我们之前看到的分层模式无关。MVC 模式在软件方面运行,而分层模式决定了我们放置数据库和应用程序服务器的方式和位置。
在遵循 MVC 模式的应用程序中,每个组件都明确指定了其角色。例如,模型类只保存数据和业务逻辑。它们不处理 HTTP 请求。视图仅显示信息。控制器处理和响应用户输入并决定将哪个模型传递给哪个视图。这被称为责任分离。随着时间的推移,随着复杂性的增加,它使应用程序易于开发和维护。
尽管模型-视图-控制器是最古老和最突出的模式之一,但多年来已经出现了替代模式。一些流行的模式包括MVVM(Model-View-ViewModel)、MVP(Model-View-Presenter)、MVA(Model-View-Adapter)。
8. ASP.NET常见面试题和答案合集:解释一下MVC模式的各个组件的作用?
模型:代表用户在 Web 应用程序中工作的所有数据和业务逻辑。在 ASP.NET 中,模型由保存数据的 C# 类和对该数据进行操作的相关逻辑表示。“模型”目录存储模型类。
例如,表示博客文章的模型类可能如下所示:
// Models/Post.cs
namespace app.Models
{
public class Post
{
public int ID { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
}
视图:代表应用程序的所有 UI 逻辑。在 Web 应用程序中,它表示发送给用户并显示在浏览器中的 HTML。
要记住的一件重要事情是此 HTML 不是静态的或硬编码的。它由控制器使用模型数据动态生成。在 ASP.NET 中,“Views”目录包含以 .cshtml 文件扩展名结尾的文件中的视图。
继续我们的博客文章示例,渲染文章的视图可能是:
// Views/Post.cshtml
<div class="post">
<div class="title">
<a href="/posts/@post.ID">@post.Title</a>
</div>
<div class=body>
@Html.Raw(post.Body)
</div>
</div>
控制器:充当模型和视图之间的接口。它处理业务逻辑和传入请求,使用模型操作数据,并与视图交互以呈现最终输出。
在 ASP.NET 中,这些是 C# 类,它们形成了模型和视图之间的粘合剂。它们处理来自浏览器的 HTTP 请求,然后检索模型数据并将其传递给视图以动态呈现响应。“Controllers”目录存储控制器类。
通过获取 Post 模型为 post 构建视图的 PostController 将是:
// Controllers/PostController
namespace app.Controllers
{
public class PostsController : BaseController
{
public IActionResult Post(int id)
{
// Get the post from the database
Post post = _service.Get(id);
// Render the post.cshtml view, by providing the post model
return View(post);
}
}
}
9. ASP.NET常见面试题有哪些:.csproj 文件的用途是什么?
项目文件是我们应用程序中最重要的文件之一。它告诉 .NET 如何构建项目。
所有 .NET 项目都在 .csproj 文件中列出了它们的依赖项。如果你以前使用过 JavaScript,请将其视为 package.json 文件。不同之处在于,这是一个 XML 文件,而不是 JSON。
当你运行 dotnet restore 时,它使用 .csproj 文件确定要下载哪些 NuGet 包并将其复制到项目文件夹(查看下一个问题以了解有关 Nuget 的更多信息)。
.csproj 文件还包含 .NET 工具构建项目所需的所有信息。它包括你正在构建的项目类型(控制台、Web、桌面等)、该项目面向的平台以及对其他项目或第 3 方库的任何依赖项。
下面是一个 .csproj 文件的示例,其中列出了 Nuget 包及其特定版本。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AWSSDK.S3" Version="3.5.6.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="5.0.0" />
<PackageReference Include="Npgsql" Version="5.0.1.1" />
<PackageReference Include="Serilog" Version="2.10.0" />
</ItemGroup>
</Project>
在上面的例子中,
- SDK 属性指定 .NET 项目的类型。
- TargetFramework 是此应用程序将在其上运行的框架,在本例中为 .NET 5。
- PackageReference 元素包括 NuGet 包。Version 属性指定了我们想要的包的版本。
10. 什么是 NuGet 包管理器?
ASP.NET面试题解析:软件开发人员不会从头开始编写所有代码。他们依赖于其他开发人员编写的代码库。任何现代开发平台都必须提供一种机制,开发人员可以在其中下载和使用现有的库,通常称为包。例如,JavaScript 生态系统有 NPM(节点包管理器),开发人员可以在其中查找和使用其他 JavaScript 开发人员编写的库。
NuGet 是 .NET 生态系统的包管理器。Microsoft 开发它是为了提供对 .NET 开发人员编写的数千个包的访问。你还可以使用它与他人共享你编写的代码。
使用 ASP.NET 开发的典型 Web 应用程序依赖于许多开源 NuGet 包来运行。例如,Newtonsoft.Json是一个非常流行的包(在撰写本文时有 91,528,205 次下载),用于在 .NET 中处理 JSON 数据。
11. Program 课程的目的是什么?
Program.cs 类是我们应用程序的入口点。ASP.NET 应用程序以与控制台应用程序相同的方式从静态 void Main()函数启动。
此类配置将为请求提供服务的 Web 主机。主机负责应用程序启动和生命周期管理,包括正常关闭。
主机至少要配置一个服务器和一个请求处理管道。主机还可以设置日志记录、配置和依赖注入。
12. Startup 类的目的是什么?
此类处理应用程序的两个重要方面,即服务注册和中间件管道。
服务是应用程序依赖的 C# 类,用于提供框架和应用程序使用的附加功能。示例包括日志记录、数据库等。这些服务必须注册才能在你的应用程序运行时和需要它们时进行实例化。
中间件管道是你的应用程序处理 HTTP 请求的顺序(下一个问题详细解释了中间件的概念)。
启动类包含两个方法:ConfigureServices()和Configure()。顾名思义,第一种方法注册应用程序需要的所有服务。第二种方法配置中间件管道。
13. wwwroot 文件夹的用途是什么?
wwwroot 文件夹包含静态文件和已编译的资产,例如你的 Web 应用程序需要的 JavaScript、CSS 和图像。Wwwroot 是整个项目中唯一一个按原样公开给浏览器的文件夹。
14. appsettings.json 文件的用途是什么?
Appsettings.json 包含应用程序的所有设置,允许你配置应用程序行为。
这是 appsettings.json 文件的示例。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"AppConnection": ""
},
"AWS": {
"Profile": "local-test-profile",
"Region": "us-west-2"
},
"AllowedHosts": "*"
}
15.什么是IIS?
IIS 代表 Internet 信息服务。它是由 Microsoft 开发的功能强大的 Web 服务器。IIS 还可以充当负载平衡器,将传入的 HTTP 请求分发到不同的应用程序服务器,以实现高可靠性和可扩展性。
它还可以充当反向代理,即接受客户端的请求,将其转发到应用服务器,并返回客户端的响应。反向代理可提高应用程序的安全性、可靠性和性能。
IIS 的一个限制是它只能在 Windows 上运行。但是,它是非常可配置的。你可以对其进行配置以满足你的应用程序的特定需求。
16.什么是Kestrel?
Kestrel 是一个开源、跨平台的 Web 服务器,专为 ASP.NET Core 设计。ASP.NET Core 中默认包含并启用 Kestrel。与 IIS 相比,它是非常轻量级的。
Kestrel 可以用作直接处理来自网络(包括 Internet)的请求的 Web 服务器。
尽管 Kestrel 可以单独为 ASP.NET Core 应用程序提供服务,但 Microsoft 建议将其与反向代理(例如 IIS、Nginx 或 Apache)一起使用,以获得更好的性能、安全性和可靠性。
17. IIS 和 Kestrel 有什么区别?为什么我们需要两个 Web 服务器?
IIS 和 Kestrel 的主要区别在于 Kestrel 是一个跨平台的服务器。它在 Windows、Linux 和 Mac 上运行,而 IIS 只在 Windows 上运行。
两者之间的另一个重要区别是 Kestrel 是完全开源的,而 IIS 是闭源的,并且仅由 Microsoft 开发和维护。
IIS 是非常古老的软件,并且带有相当多的遗留和膨胀。使用 Kestrel,Microsoft 一开始就考虑到了高性能。他们从头开始开发它,这使他们能够忽略遗留/兼容性问题并专注于速度和效率。
但是,Kestrel 并未提供成熟的 Web 服务器(例如 IIS、Nginx 或 Apache)的所有丰富功能。因此,我们通常将其用作应用程序服务器,上述服务器之一充当反向代理。
18.什么是缓存?
缓存是将数据存储在比数据原始位置访问更快的临时存储位置的过程,以便下次需要相同数据时可以更快地访问它。
缓存提高了应用程序的可扩展性和性能。它通过减少获取数据所需的工作来实现这一点。缓存对于不经常更改且创建和检索成本高昂的数据很有用。
ASP.NET 提供了一组开箱即用的缓存功能。你可以将 IMemoryCache 接口用于简单的用例。它代表存储在 Web 服务器内存中的缓存。ASP.NET 还支持分布式缓存,它是由多个应用服务器共享的缓存,与 Redis 一起使用。
高级ASP.NET常见面试题和答案合集
19. 什么是 ASP.NET 中的模型绑定?
控制器和视图需要处理来自 HTTP 请求的数据。例如,路由可以提供标识记录的键,并且发布的表单字段可以提供模型属性。将这些字符串值转换为 .NET 对象的过程可能很复杂,而且你必须对每个请求进行处理。模型绑定自动化并简化了这个过程。
模型绑定系统从多个来源获取数据,例如表单字段、路由数据和查询字符串。它还在方法参数和属性中向控制器和视图提供数据,在过程中将纯字符串数据转换为 .NET 对象和类型。
示例:
假设你在 PostsController 类上有以下操作方法:
[HttpGet("posts/{id}")]
public ActionResult<Post> GetById(int id, bool archivedOnly)
并且应用程序收到一个带有这个 URL 的请求:
http://yourapp.com/api/Posts/5?ArchivedOnly=true
路由选择action方法后,模型绑定执行以下步骤。
- 找到 GetByID 的第一个参数,一个名为 id 的整数,查看 HTTP 请求中的可用源,在路由数据中找到 id = "5"。
- 将字符串“5”转换为整数 5。
- 找到 GetByID 的下一个参数,一个名为 archivedOnly 的布尔值。
- 查看来源并在查询字符串中找到“ArchivedOnly=true”。它在将参数与字符串匹配时忽略大小写。
- 将字符串“true”转换为布尔值true。
其他一些属性示例包括:
1. [FromQuery] - 从查询字符串中获取值。
2. [FromRoute] - 从路由数据中获取值。
3. [FromForm] - 从发布的表单字段中获取值。
4. [FromBody] - 从请求正文中获取值。
5. [FromHeader] - 从 HTTP 标头中获取值。
20. 什么是动作方法?
动作方法是控制器类中的方法,具有以下限制:
- 它必须是公开的。不允许私有或受保护的方法。
- 它不能过载。
- 它不能是静态方法。
动作方法执行动作以响应 HTTP 请求。
例如,这里是 PostController 上的 Index() 操作方法的示例。它接受一个 id 作为输入并返回一个 IActionResult,它可以由任何结果类实现(参见以下问题)。
public class PostController : Controller
{
public IActionResult Index(int id)
{
}
}
21. ASP.NET常见面试题有哪些:实现 IActionResult 接口的不同类型有哪些?
ASP.NET Core 有许多不同类型的 IActionResult:
- ViewResult - 生成 HTML 视图。
- RedirectResult - 发送 302 HTTP 重定向响应以自动将用户发送到指定的 URL。
- RedirectToRouteResult - 发送 302 HTTP 重定向响应以自动将用户发送到另一个页面,其中 URL 是使用路由定义的。
- FileResult - 返回一个文件作为响应。
- ContentResult - 返回提供的字符串作为响应。
- StatusCodeResult - 发送原始 HTTP 状态代码作为响应,可选地带有关联的响应正文内容。
- NotFoundResult - 发送原始 404 HTTP 状态代码作为响应。
22. HTTPContext 对象是什么?如何在控制器中访问它?
HTTPContext 封装了有关单个 HTTP 请求的所有特定于 HTTP 的信息。你可以使用ControllerBase.HttpContext属性在控制器中访问此对象:
public class HomeController : Controller
{
public IActionResult About()
{
var pathBase = HttpContext.Request.PathBase;
...
return View();
}
}
23.什么是依赖注入?
ASP.NET面试题解析:依赖注入是一种有助于开发松散耦合代码的设计模式。这种模式在 ASP.NET 中被广泛使用。
依赖注入意味着在对象的构造函数中提供对象需要的对象(它的依赖项),而不是要求对象构造它们。
依赖注入减少并经常消除不需要相互了解的对象之间不必要的依赖关系。它还有助于通过在运行时模拟或删除依赖项来进行测试。
24. 解释依赖注入在 ASP.NET Core 中是如何工作的?
ASP.NET Core 使用内置的 IoC(控制反转)容器注入依赖类的实例。该容器由支持构造函数注入的 IServiceProvider 接口表示。
容器管理的类型(类)称为服务。为了让 IoC 容器自动注入我们的服务,我们首先需要在 Startup 类中将它们注册到 IoC 容器中。
ASP.NET Core 支持两种类型的服务,即框架服务和应用程序服务。框架服务是 ASP.NET Core 框架的一部分,例如 ILoggerFactory、IApplicationBuilder、IHostingEnvironment 等。相比之下,开发人员专门为应用程序创建应用程序服务(自定义类型或类)。
25. 什么是cookie?
cookie 是跨请求甚至会话保留的少量数据。Cookie 存储有关用户的信息。浏览器将 cookie 存储在用户的计算机上。大多数浏览器将 cookie 存储为键值对。
在 ASP.NET Core 中编写 cookie:
Response.Cookies.Append(key, value);
在 ASP.NET Core 中删除 cookie
Response.Cookies.Delete(somekey);
26.解释一下ASP.NET Core中中间件的概念?
一般来说,中间件是促进两个组件之间通信流的管道软件。在 Web 应用程序框架中,中间件为默认框架之外的应用程序提供通用服务和功能。
在 ASP.NET Core 中,中间件是指 C# 类,这些类在 HTTP 请求传入或 HTTP 响应传出时对其进行操作。例如,
为传入的 HTTP 请求生成 HTTP 响应
拦截并对传入的 HTTP 请求进行更改并将其传递给下一个中间件。
拦截并更改传出的 HTTP 响应,并将其传递给下一个中间件。
中间件最常见的用例之一是处理影响整个应用程序的问题。无论请求中的特定路径或请求的资源如何,你的应用程序的这些方面都需要在每个请求中发生。这些包括日志记录、安全性、身份验证、授权等内容。
例如,日志中间件记录请求传入并将其传递给另一个中间件。其他一些常见的中间件用途包括数据库中间件、错误处理中间件和身份验证/授权中间件。
在这些示例中的每一个中,中间件都会接收请求,对其进行修改,然后将其传递给管道中的下一个中间件。后续中间件使用前面中间件添加的细节以某种方式处理请求。下图说明了这一点。
27. 什么是路由,如何在 ASP.NET Core 中定义路由?
路由是将传入的 HTTP 请求映射到应用程序代码中的特定方法的过程。路由器将传入的请求映射到路由处理程序。它接受一个 URL 作为输入并对其进行解构以确定路由请求的控制器和操作方法。
例如,一个简单的路由模式可能会确定/posts/show URL 映射到PostsController上的Show操作方法。有两种方法可以在 ASP.NET Core MVC 应用程序中定义路由。
- 常规路由
- 基于属性的路由。
我们可以在应用程序中使用常规路由和属性路由。
28.解释常规路由是如何工作的?
顾名思义,传统路由使用预定义的约定将传入的 HTTP 请求与控制器的操作方法进行匹配。它处理典型 Web 应用程序所需的最一般情况,但你可以对其进行修改以满足你的特定需求。
例如,Startup.cs 类中的 Configure() 方法包含以下用于设置常规路由的代码。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
此代码创建了一个名为“default”的路由。路由模板图案“{控制器=主页} / {行动=索引} / {ID?}”用于将传入的URL相匹配,如/帖子/存档/ 5到归档(INT ID)上的PostsController动作方法,为 id 参数传递 5。默认情况下,路由器使用 HomeController 上的 Index 方法。
29.解释基于属性的路由是如何工作的?
属性路由是传统路由的替代路由策略。它通常用于为 Web 服务创建 REST API 端点。它使用一组属性将操作方法直接映射到路由模板。
属性路由直接定义了动作方法的路由。我们也可以在控制器上使用这些属性。它使我们能够对哪些路由映射到哪些操作进行细粒度的控制。对于属性路由,控制器和动作名称在确定动作方法方面没有任何作用。
例如,我们使用属性博客和家庭映射进来的URL,如myapp.com/blog/post/3在展会上的方法PostsController。
[Route("blog")]
public class PostsController : Controller
{
[HttpGet("post/{id:int}")]
public IActionResult Show(int id = 0)
{
Post post = new Post()
{
ID = id
};
return View("Show", post);
}
[HttpGet("edit/{id:int}")]
public IActionResult Edit(int id)
{
Post postToEdit = _service.Get(id);
return View("Edit", postToEdit);
}
}
在上面的例子中,属性[Route(“blog”)]放在控制器上,而路由[HttpGet(“post/{id:int}”)]放在操作方法上。控制器路由适用于该控制器中的所有操作。例如,第二个[“edit/{id:int}”]路由匹配 url myapp.com/blog/edit/3。
除了上述路由模板,ASP.NET Core 还提供了以下 HTTP 动词模板。
- [HttpGet]
- [HttpPost]
- [HttpPut]
- [HttpDelete]
- [HttpHead]
- [HttpPatch]
30. ASP.NET常见面试题和答案合集:什么是 RESTful Web 服务或 Web API?
并非所有 Web 应用程序都返回 HTML 视图作为对 HTTP 请求的响应。有时,客户端只需要你的应用程序中的一些数据,并且想要处理这些数据的格式。
例如,假设你的应用程序同时支持 Web 和移动界面。无需编写返回 HTML 和移动视图的两个单独项目,你可以编写一个仅返回客户端需要的特定数据的应用程序。一旦客户端收到此数据,他们就会相应地对其进行格式化。Web 客户端使用视图模板和 JavaScript 呈现 HTML,移动客户端为其特定平台生成适当的移动视图。
一个应用程序可能还需要与另一个应用程序通信以获取它需要的数据。例如,当你访问 Amazon.com 时,它会与数百个其他服务和应用程序通信以检索数据并呈现你看到的最终 HTML 页面。
此类提供数据的后端应用程序通常称为 RESTful Web 服务。REST 协议使用GET、POST、PUT、DELETE等动词在多个应用程序之间进行通信。客户端和服务器可以用不同的语言和技术编写,并且仍然可以在彼此不了解的情况下协同工作,只要双方都知道要发送的数据的格式。
ASP.NET Core 支持使用 C# 创建 RESTful 服务,也称为 Web API。Web API 由一个或多个派生自 ControllerBase 类的控制器组成。
[PostController]
[Route("[controller]")]
public class PostController : ControllerBase
MVC 控制器派生自Controller类。但是,Web API 控制器应该从 ControllerBase 类派生。原因是 Controller 派生自 ControllerBase 并提供对视图的额外支持,你不需要 Web API 请求。
也就是说,你可以使用控制器来渲染视图和数据。也就是说,它既可以充当 MVC 控制器,也可以充当 Web API 控制器。在这种情况下,你可以从 Controller 类派生控制器。
31. ASP.NET常见面试题有哪些:什么是实体框架?
ASP.NET面试题解析:大多数应用程序需要存储和检索数据。通常,我们将这些数据存储在数据库中。使用数据库通常相当复杂。你必须管理数据库连接,将应用程序中的数据转换为数据库可以理解的格式,并处理许多其他微妙的问题。
.NET 生态系统具有可用于此目的的库,例如 ADO.NET。但是,手动构建 SQL 查询并将数据从数据库来回转换为 C# 类仍然很复杂。
EF 代表实体框架,是一个提供面向对象的方式来访问数据库的库。它充当对象关系映射器,与数据库通信,并将数据库响应映射到 .NET 类和对象。
实体框架 (EF) 核心是实体框架的轻量级、开源和跨平台版本。
以下是两者之间的本质区别:
跨平台:
- 我们可以在面向 .NET Core 的跨平台应用程序中使用 EF Core。
- EF 6.x 面向 .NET Framework,因此你只能使用 Windows。
表现:
- EF Core 快速且轻量级。它的性能明显优于 EF 6.x。
特征:
- EF Core 具有一些 EF 6.x 没有的功能(批处理语句、客户端密钥生成、用于测试的内存数据库)
- EF 6.x 的功能比 EF Core 丰富得多。在撰写本文时,EF Core 缺少一些标题功能,例如延迟加载和完整的服务器端 Group By。但是,它正在积极开发中,因此这些功能无疑会很快出现。
结论
32. 结论
在这篇关于 ASP.NET 面试问题的文章中,我们了解了旧的 ASP.NET 框架及其现代替代方案,即 ASP.NET Core。本文探讨了面试官在初级/中级开发人员职位的求职面试中会问的各种基本和高级问题。我们希望它对你的下一次求职面试有所帮助!
有用的资源和参考资料: