二十一、答案
第一章
- 依赖注入有什么好处?
它允许更好地分离接口和实际实现,并允许我们随时更改实现。它还递归地注入所有必需的依赖项。
- 什么是环境?
一组命名的启动值。
- MVC 是什么意思?
Easy peasy:模型视图控制器!
- 内置依赖注入容器中支持的生存期是多少?
Transient
(每次创建一个新实例)、Scoped
(每次 HTTP 请求都创建一个新实例并始终返回)、Singleton
(创建一个实例)。
- .NET Core 与.NET 标准有什么区别?
.NET 标准只是由.NET 和.NET Core 等实现的一组标准 API。
- 什么是元包?
由 Microsoft 定义的一组软件包。它包含简单 ASP.NET Core 项目通常需要的所有包。
- OWIN 是什么?
OWIN 代表为.NET开放的 Web 界面,您可以在上阅读 http://owin.org 。本质上,它是一种将 web 应用与特定服务器(如 IIS)分离的规范。
第二章
- 检索配置值的根接口是什么?
是IConfiguration
。这是IConfigurationRoot
和IConfigurationSection
继承的地方。
- 什么是.NET Core 中内置的基于文件的配置提供程序?
JSON、XML 和 INI。
- 是否可以将配置绑定到开箱即用的 POCO 类?
是的,但是我们需要添加Microsoft.Extensions.Configuration.Binder
NuGet 包。
- 在
IOptions<T>
和IOptionsSnapshot<T>
接口之间有什么区别?
IOptionsSnapshot<T>
在基础配置更改时更新(如果我们为此进行了配置),但IOptions<T>
始终保留原始配置值。
- 我们是否需要在依赖项注入容器中显式注册配置对象?
否。从 ASP.NET Core 2.0 开始,IConfiguration
自动注入。
- 我们如何拥有可选的配置文件?
注册基于文件的配置文件时,将optional
参数设置为true
。
- 当配置发生变化时,是否可以获得通知?
对我们需要获得一个重新加载令牌,然后在其中注册一个更改回调委托。
第三章
- 什么是特殊路线代币?
[controller]
、[action]
和[area]
。
- 我们如何防止根据请求的 HTTP 谓词选择路由?
将[HttpPost]
、[HttpGet]
、[HttpPut]
或其他 HTTP 属性之一应用于其操作方法。
- 除非请求使用 HTTPS,否则如何防止路由被选择?
将[RequireHttps]
属性应用于路由的操作方法。
- 我们如何根据发生的 HTTP 错误代码提供不同的视图?
一种方法是在Startup
类的Configure
方法中使用UseStatusCodePagesWithRedirects
或UseStatusCodePagesWithReExecute
,通过向控制器添加[HttpGet("error/401")]
属性,在控制器上创建响应特定错误代码(例如/error/401
的操作方法。
- 如何防止调用控制器中的方法?
最好的方法是对我们想要隐藏的方法应用[NonAction]
属性。
- 我们如何强制路由值为特定类型(例如,数字)?
添加number
验证令牌,例如[HttpGet("{id:number]")]
。
- 什么是路线处理程序?
实际处理请求的是IRouter
接口的实现。对于 MVC,它通常是MvcRouteHandler
类,通过UseMvc
扩展方法添加到管道中。
第四章
- 模型状态的默认验证提供程序是什么?
它是数据注释 API。
- 什么是动作?
可以在控制器上调用以响应 HTTP 请求的方法。
- 什么是全球化?全球化与本土化有何不同?
全球化意味着您的应用将支持多种区域性。本地化是使应用正常工作并对特定文化做出相应反应的过程。
- 临时数据的用途是什么?
临时数据用于在同一客户端的两个后续请求之间持久化数据,如微会话。
- 缓存有什么用?
缓存对于需要很长时间才能生成或检索的数据非常有用。我们将这些数据存储在缓存中,并可以快速访问它。
- 什么是会话?
会话是在给定时间范围内与网站进行的一组用户交互。每个交互都通过会话 ID 与会话相关联。
- 从
Controller
基类继承控制器有什么好处?
Controller
类提供了ControllerBase
中没有的一些有用方法,例如返回视图的方法(View
。
第五章
- 视图的基类是什么?
为RazorPage<T>
,其中T
泛型类型默认为dynamic
。
- 如何向视图中注入服务?
在.cshtml
文件上使用@inject
声明,或者从RazorPage<T>
类继承并使用构造函数注入。
- 什么是视图位置扩展器?
它是一个组件,可用于告诉 ASP.NET Core 在何处查找物理.cshtml
文件。
- 什么是视图布局?
它类似于 ASP.NET Classic 中的母版页。本质上,它定义了不同页面可以使用的布局或结构。
- 什么是局部视图?
部分视图类似于 ASP.NET Classic 中的 web 用户控件(.ascx
文件)。它们是包含可重用标记的文件,可能还包含要跨不同视图重用的代码。
- 什么功能可以替代局部视图?
查看组件。
- 特殊文件
_ViewStart.cshtml
的作用是什么?
无论您在其中输入什么代码、@using
或@inject
声明,都会在实际视图之前执行。
第六章
- 默认的验证提供程序是什么?
它是数据注释验证程序。
- 用于呈现 HTML 字段的方法叫什么?
HTML 助手。
- 什么是模型元数据?
它是描述模型属性的代码,例如它们的显示名称、是否需要它们、它们应该使用什么验证等等。
- ASP.NET Core 是否支持客户端验证?
是的。
- 什么是可以绑定到上传文件的基本接口?
IFormFile
。
- 什么是不引人注目的验证?
这是一个过程,通过添加几个 JavaScript 库,可以根据一些约定自动设置验证。
- 我们如何进行服务器端验证?
通过利用[Remote]
属性并在控制器上实现验证操作方法。
第七章
- 我们可以使用什么属性来标记方法或控制器,以便只能通过 HTTPS 调用它?
[RequireHttps]
。
- 基于角色的授权和基于策略的授权有什么区别?
基于策略的授权更强大;它可以同时使用这两个角色,也可以使用您可以想到的任何其他自定义需求。
- CORS 的目的是什么?
CORS 是一种机制,通过该机制,服务器可以告诉浏览器绕过其正常的安全限制,并允许从不同的源(服务器)加载静态资源(通常是脚本)。
- HSTS 的目的是什么?
这是一种告诉浏览器只能通过 HTTPS 与服务器交互的 web 策略。RFC 6797 中对此进行了规定。
- 认证过程的挑战阶段是什么?
挑战是当服务器要求客户端提供有效凭据时。
- 将请求绑定到模型类时,我们为什么要小心?
我们不希望客户不应提供的敏感信息绑定到模型。
- 饼干的滑动过期时间是多少?
这意味着在每次请求时,cookie 的更新时间与最初设置的时间相同。
第八章
- 什么是小田?
OData 是一个开放协议,用于公开和使用可查询的 RESTful 数据模型。
- 什么是内容协商?
这是一个客户机和服务器就要返回的内容类型达成一致的过程。
- 为什么不适合在 web API 中使用 cookie 进行身份验证?
因为这些 API 的客户端通常不是 web 浏览器,因此可能没有存储 cookie 的能力。
- 我们可以通过哪些不同的方式请求特定版本的 API?
查询字符串或 HTTP 标头。
- 关于行动方法的公约的目的是什么?
约定允许我们定义从每个操作方法返回的返回类型和 HTTP 状态代码,以及可能出现的任何异常。
- 问题详情是什么?
以标准方式返回错误信息的一种方法。RFC 7807 中定义了问题详细信息。
- 什么是休息?
一种用于定义 web 服务的体系结构样式,设计用于互操作性,它依赖于 HTTP 谓词、URL 和标头。
第九章
- 如何从不同的部件加载局部视图?
通过使用嵌入式资源或更好的 Razor 类库。
- 呈现局部视图的两种方式是什么?
一个是使用Html.PartialAsync
方法,另一个是使用<partial>
标记助手。
- 标记帮助器和标记帮助器组件之间有什么区别?
标记帮助器呈现组件而不是自定义或 HTML 标记,标记帮助器组件允许我们在呈现所有 HTML 标记之前拦截并可能修改它们。
- 我们如何根据环境限制视图上显示的内容?
通过使用<environment>
标记帮助器。
- Razor 类库和类库有什么区别?
Razor 类库允许我们非常容易地将静态资源提供给 web 项目,而类库只涉及代码。
- 什么是嵌入式资源?
包含在程序集中并可以从中检索的静态文件(图像、文本和其他文件)。
- 执行视图组件的两个语法是什么?
一个是代码语法-Component.InvokeAsync("mycomponent", new { arg1 = "...", arg2 = 123 })
-另一个是标记-<mycomponent arg1="..." arg2="123"/>
。
第十章
- 用于控制资源授权的两个接口是什么?
IAuthorizationFilter
和IAsyncAuthorizationFilter
。
- 为什么每种过滤器都有两种版本?
总是有一个异步版本,这可能是首选。
- 如何通过在动作方法上指定过滤器类型来应用过滤器?
通过ServiceFilterAttribute
或TypeFilterAttribute
进行。
- 我们如何将订单应用于过滤器的应用?
当使用属性应用过滤器时,我们可以使用Order
属性。
- 我们可以应用过滤器的不同级别是什么?
全局、控制器和操作方法。
- 我们如何将上下文从一个过滤器传递给其他过滤器?
使用HttpContext.Items
集合。
- 过滤器如何利用依赖注入?
[ServiceFilter]
可根据其类型从 DI 获得过滤器。
第十一章
- Razor 页面是否使用代码隐藏?
是的,他们可以,但这不是强制性的。代码隐藏类必须继承自PageModel
并与.cshtml
文件一起定位。
- 页面模型的用途是什么?
它是实现不同 HTTP 谓词(GET
、POST
等)的处理程序的地方。
- 什么是页面处理程序?
它们是在PageModel
类中处理请求的代码。
- 如何限制匿名用户调用 Razor 页面?
在使用AddRazorPagesOptions
方法配置 Razor 页面选项时,我们使用AllowAnonymousToPage
扩展方法添加了一个约定,在AddMvc
之后。
- 我们可以通过哪两种方式将服务注入剃须刀页面?
一种方法是在PageModel
类上使用构造函数注入,另一种方法是在.cshtml
文件上使用@inject
指令。
- 剃须刀页面是否使用页面布局?
是的,请确保它们与其他视图布局分开。
- 剃须刀页面默认在哪里提供?
Pages
文件夹。
第十二章
- 什么是事件计数器?
由应用发出并由操作系统拾取的轻量级代码。
- 遥测的好处是什么?
从单个仪表板集中存储日志和事件并监视应用。
- 我们如何过滤日志记录?
按类别名称或日志级别。
- 什么是健康检查?
它们指示我们的应用或依赖项(例如,数据库、外部服务等)的性能。
- 中间件在日志记录中有何用处?
在处理请求之前和之后,它可以坐在请求和日志的中间。
- 什么是榆树?
错误日志中间件它用于查看处理请求期间引发的事件。
- 与普通日志相比,诊断有什么好处?
Diagnostics 提供强类型事件,并与 ELM 集成,以方便查看事件。
第十三章
- 什么是比较流行的单元测试框架?
NUnit、xUnit 和 MSTest。
- 嘲笑有什么好处?
替换依赖项。
- 单元测试和集成测试有什么区别?
单元测试应该是快速的,没有任何副作用,应该只测试一个特定的操作,而集成测试的规模要大得多。
- 什么是 TDD?
测试驱动开发:一种提倡从单元测试开始的方法。
- 单元测试的局限性是什么?
它们通常不测试用户界面或数据库操作等方面。
- 如何将数据自动传递给单元测试?
所有研究的单元测试框架都允许将数据从属性传递到测试方法。
- 红绿重构是什么意思?
这是 TDD 的一种实践,我们从编写测试开始,测试最初失败(红色),然后让测试通过(绿色),只有这样,我们才应该担心重构代码以提高效率。
第十四章
- 打字脚本有什么好处?
它有很强的类型,是一个完全面向对象的编程模型。
- JavaScript 是否只在浏览器上运行?
不,它也可以在服务器端运行。
- 什么是温泉?
单页应用,基于 JavaScript 的应用,通过 AJAX 风格的调用调用服务器端功能。
- 图书馆经理的目的是什么?
在本地项目中安装客户端库。
- dotnet SPA 框架的模板是否已硬编码?
不,它们作为 NuGet 软件包提供,可以安装和更新。
- 我们如何从.NET Core 运行 JavaScript 代码?
节点服务提供了这一功能。
- 列举一些具有 dotnet 模板的 SPA 框架。
Vue、React、Angular、Aurelia 和 Knockout。
第 15 章
- ASP.NET Core 3 可用的两台主机是什么?
红隼和 HTTP.sys。
- 可用的两种缓存是什么?
在内存和分布式中。
- 压缩响应有什么好处?
最小化响应的延迟。
- 缓存响应的目的是什么?
避免了请求和发送响应的需要。
- 异步操作是否提高了性能?
没有,但它们提高了可伸缩性。
- 什么是捆绑?
捆绑是在单个响应中组合多个文件。
- 剖析器有什么用?
它们可以向我们展示代码中执行时间最长的部分。
第十六章
- Signal 支持哪两种序列化格式化程序?
JSON 和消息包。
- 信号员支持什么交通工具?
AJAX 长轮询、WebSocket 和服务器发送事件。
- 消息包协议的好处是什么?
消息包更紧凑,因此延迟更低。
- 我们可以向哪些目标发送消息?
单个收件人、所有用户或用户组。
- 我们为什么要限制信号员使用交通工具?
某些传输可能不受支持或受到限制,例如 WebSocket。
- 我们能否从承载 Signal 的 web 应用外部向其发送消息?
对
- 我们可以用信号机进行身份验证吗?
对
第 17 章
- 页面和组件之间有什么区别?
两者之间的唯一区别是可以直接从浏览器访问页面。
- 服务器托管模式和 WebAssembly 托管模式有什么区别?
服务器模型依赖信号器与服务器进行通信,而 WebAssembly 仅存在于正在编译为webassembly
的客户机上,因此得名。WebAssembly 在断开连接时可以工作。
- 我们可以在 Blazor 页面中使用标签助手吗?
不,我们不能(在.razor
文件中)。
- 是否可以从 Blazor 内部访问包含的网页?
是的,它是,使用 JavaScript 互操作性。
- Blazor 是否支持依赖注入?
是的,但不是构造函数注入。
- Blazor 页面布局是否支持区域?
是的,但只有一个区域体。
- 组件的不同渲染模式有什么区别?
不同之处在于性能和容量:Static
最快,但不支持服务器事件;Server
最慢,无法获取参数;ServerPrerendered
是两者之间的折衷——组件的 a 部分已预呈现,但实际交互仅在页面完全加载时开始。
第 18 章
- 什么是 gRPC?
gRPC 是 Google Remote Procedure Call,这是一种跨平台的技术,用于实现与该技术无关的 web 服务。
- URL 重写的目的是什么?
显示用户友好的 URL,这些 URL 将被转换为对应用有意义的内容。
- 后台服务的用途是什么?
在后台运行任务。
- 区域的用途是什么?
从物理上和概念上分离应用的各个部分。
- 习俗有什么好处?
自动强制默认设置。
- 我们如何自动执行引用程序集的代码?
通过向库添加一个[HostingStartup]
属性并将其包含在ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
环境变量中。
- 我们可以从组件内部加载文件吗?
是,作为嵌入式资源或来自 Razor 类库。
第 19 章
- 使用 IIS 向外界公开应用有什么好处?
例如,您可以添加日志记录和 Windows 身份验证。
- 您为什么要将 web 应用作为 Windows 服务托管?
它使启动和停止以及查看服务是否正在运行变得更加容易。
- 使用 Docker 有什么好处?
您可以准确地控制依赖项和运行环境。
- 什么是自包含部署?
它是一种不需要在目标计算机上安装.NET Core 的部署。
- 是否可以在运行时检测更改并自动重新编译代码?
是的,我们只需要运行dotnet watch
命令。
- 我们可以使用命令行部署还是需要 Visual Studio?
我们可以使用命令行(dotnet
)或 Visual Studio。
- 您可以从 VisualStudio 内部部署到哪些云提供商?
Azure 和 AWS 就是两个例子。
版权属于:月萌API www.moonapi.com,转载请注明出处