ASP.NET Core面试题汇总

news2024/12/27 9:02:48

1.如何在controller中注入service?

在configservices方法中配置这个service。

在controller的构造函数中,添加这个依赖注入。

2.ASP.NET Core 比 ASP.NET 更具优势的地方是什么?

跨平台,ASP.NET Core 可以运行在 Windows 、Linux 和 MAC 系统上;

对框架本安装没有依赖,所有依赖都跟程序本身在一起;

ASP.NET Core 处理请求的效率更高,进而可以处理更多的请求;

ASP.NET Core 具有更多的安装配置方法。

3.asp.net core 主要的特性有哪些?

依赖注入。

日志系统架构。

引入了一个跨平台的网络服务器,kestrel。

可以没有iis, apache和nginx就可以单独运行。

可以使用命令行创建应用。

使用AppSettings.json 来配置工程。

使用start up来注册服务。

更好的支持异步编程。

支持web socket和signal IR。

对于跨网站的请求的预防和保护机制。

4.ASP.NET Core Filter如何支持依赖注入?

可以通过全局注册,支持依赖注入

通过TypeFilter(typeof(Filter)) 标记在方法,标记在控制器

通过ServiceType(typeof(Filter))标记在方法,标记在控制器,必须要注册Filter这类;

TypeFilter和ServiceType的本质是实现了一个IFilterFactory接口;

5. ASP.NET Core中有哪些异常处理的方案?

1).继承Controller,重写OnActionExecuted

默认都会继承一个Controller类,重写OnActionExecuted,添加上异常处理即可。一般情况下我们会新建一个BaseController, 让所有Controller继承BaseController。代码如下

 public class BaseController : Controller
 {
     public override void OnActionExecuted(ActionExecutedContext context)
     {
         var exception = context.Exception; 
         if (exception != null)
         {
             context.ExceptionHandled = true; 
             context.Result = new ContentResult
             {

                 Content = $"BaseController错误 : {exception.Message}"

             };
         }
         base.OnActionExecuted(context);

     }

 }

2).使用 ActionFilterAttribute。

ActionFilterAttribute是一个特性,本身实现了 IActionFilter 及 IResultFilter , 所以不管是action里抛错,还是view里抛错,理论上都可以捕获。我们新建一个 ExceptionActionFilterAttribute, 重写 OnActionExecuted及OnResultExecuted,添加上异常处理,完整代码如下:

 public class ExceptionActionFilterAttribute : ActionFilterAttribute
 {
     public override void OnActionExecuted(ActionExecutedContext context) 
     { 
         var exception = context.Exception; 
         if (exception != null) 
         { 
             context.ExceptionHandled = true; 
             context.Result = new ContentResult { Content = $"错误 : {exception.Message}" }; 
         }
         base.OnActionExecuted(context); 
     }

     public override void OnResultExecuted(ResultExecutedContext context) 
     { 
         var exception = context.Exception; 
         if (exception != null) 
         { 
             context.ExceptionHandled = true; 
             context.HttpContext.Response.WriteAsync($"错误 : {exception.Message}"); 
         } 
         base.OnResultExecuted(context); 
     }
 }

使用方式有两种,

在controller里打上 [TypeFilter(typeof(ExceptionActionFilter)] 标签;

在Startup里以filter方式全局注入。

services.AddControllersWithViews(options =>{options.Filters.Add<ExceptionActionFilterAttribute>;})

3).使用 IExceptionFilter

我们知道, Asp.Net Core提供了5类filter, IExceptionFilter是其中之一,顾名思义,这就是用来处理异常的。

Asp.net Core中ExceptionFilterAttribute已经实现了IExceptionFilter,所以我们只需继承ExceptionFilterAttribute,

重写其中方法即可。同样新建CustomExceptionFilterAttribute继承 ExceptionFilterAttribute,重写 OnException ,

添加异常处理,完整代码如下:

    public class CustomExceptionFilterAttribute : ExceptionFilterAttribute { 
        public override void OnException(ExceptionContext context) 
        { 
            context.ExceptionHandled = true; 
            context.HttpContext.Response.WriteAsync($"CustomExceptionFilterAttribute错误:{context.Exception.Message}"); 
            base.OnException(context); 
        } 
    }

4).使用ExceptionHandler.

在 startup 里,vs新建的项目会默认加上.

if (env.IsDevelopment){app.UseDeveloperExceptionPage;}else{app.UseExceptionHandler("/Home/Error");}

5).自定义Middleare处理

通过middleware全局处理。

public class ErrorHandlingMiddleware
{
    private readonly RequestDelegate next;
    public ErrorHandlingMiddleware(RequestDelegate next) { this.next = next; }

    public async Task Invoke(HttpContext context)
    {
        try {
            await next(context);
        }
        catch (System.Exception ex)
        {
            //处理异常
        }
    }
}

6.介绍ASP.NET Core中服务的生命周期?

ASP.NET Core支持依赖注入软件设计模式,它允许在不同的组件中注入我们的服务,并且控制服务的初始化。有些服务可以在短时间内初始化,并且只能在某个特别的组件,以及请求中才能用到;而还有一些服务,仅仅只用初始化一次,就可以在整个应用程序中使用。

Singleton --单例模式:

只有一个服务的实例被创建,这个实例,存储在内存中,可以在整个应用程序中使用。我们可以对一些初始化代价比较大的服务,使用Singleton模式。在代码中可以这样:

services.AddSingleton<IProductService, ProductService>;

Scoped --作用域

这种模式下,将会为每一个请求,都创建一个服务的实例。所有同一个请求中的中间件、MVC控制器,等等,都会得到一个相同的服务实例。Entity Framework Context就是一个Scoped服务最好的参考例子。我们可以通过使用AddScoped方法来使用Scoped模式:

services.AddScoped<IProductService, ProductService>;

Transient --短暂的、瞬变的  

Transient模式下,服务每次被请求的时候,都会创建一个服务实例,这种模式特别适合轻量级、无状态的服务。我们可以使用AddTransient方法,来注入服务:

services.AddTransient<IProductService, ProductService>;

7.什么是依赖注入?

依赖注入是一个过程,就是当一个类需要调用另一个类来完成某项任务的时候,在调用类里面不要去new被调用的类的对象,而是通过注入的方式来获取这样一个对象。具体的实现就是在调用类里面有一个被调用类的接口,然后通过调用接口的函数来完成任务。比如A调用B,而B实现了接口C,那么在A里面用C定义一个变量D,这个变量的实例不在A里面创建,而是通过A的上下文来获取。这样做的好处就是将类A和B分开了,他们之间靠接口C来联系,从而实现对接口编程。

8.依赖注入有哪几种方式?

setter注入:

就是在类A里面定义一个C接口的属性D,在A的上下文通过B实例化一个对象,然后将这个对象赋值给属性D。主要就是set 与 get

构造函数注入:

就是在创建A的对象的时候,通过参数将B的对象传入到A中。

还有常用的注入方式就是工厂模式的应用了,这些都可以将B的实例化放到A外面,从而让A和B没有关系。还有一个接口注入,就是在客户类(A)的接口中有一个服务类(B)的属性。在实例化了这个接口的子类后,对这个属性赋值,这和setter注入一样。

接口注入:

相比构造函数注入和属性注入,接口注入显得有些复杂,使用也不常见。具体思路是先定义一个接口,包含一个设置依赖的方法。然后依赖类,继承并实现这个接口。

9.控制反转是什么?

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。

通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

10.依赖注入有哪些著名的框架?

Unity、autofac、http://spring.net、MEF、Injection、Asp.Net Core的ServiceCollection。

11.什么是.NET Core中间件(Middleware)?

中间件是组装到应用程序管道中以处理请求和响应的软件。每个组件:

选择是否将请求传递给管道中的下一个组件。

可以在调用管道中的下一个组件之前和之后执行工作。

请求委托(Request delegates)用于构建请求管道,处理每个HTTP请求。

请求委托使用Run,Map和Use扩展方法进行配置。单独的请求委托可以以内联匿名方法(称为内联中间件)指定,或者可以在可重用的类中定义它。这些可重用的类和内联匿名方法是中间件或中间件组件。请求流程中的每个中间件组件都负责调用流水线中的下一个组件,如果适当,则负责链接短路。

12.ASP.NET Core中间件的使用场景有哪些?

份验证,Session存储,日志记录等。其实我们的Asp.net core项目中本身已经包含了很多个中间件。比如 身份认证中间件 UseAuthorization等系列

13.列举官方常用的中间件?

异常/错误处理 当应用在开发环境中运行时:开发人员异常页中间件 (UseDeveloperExceptionPage) 报告应用运行时错误。

数据库错误页中间件报告数据库运行时错误。

当应用在生产环境中运行时:异常处理程序中间件 (UseExceptionHandler) 捕获以下中间件中引发的异常。

HTTP 严格传输安全协议 (HSTS) 中间件 (UseHsts) 添加 Strict-Transport-Security 标头。

HTTPS 重定向中间件 (UseHttpsRedirection) 将 HTTP 请求重定向到 HTTPS。

静态文件中间件 (UseStaticFiles) 返回静态文件,并简化进一步请求处理。

Cookie 策略中间件 (UseCookiePolicy) 使应用符合欧盟一般数据保护条例 (GDPR) 规定。

用于路由请求的路由中间件 (UseRouting)。

身份验证中间件 (UseAuthentication) 尝试对用户进行身份验证,然后才会允许用户访问安全资源。

用于授权用户访问安全资源的授权中间件 (UseAuthorization)。

会话中间件 (UseSession) 建立和维护会话状态。

如果应用使用会话状态,请在 Cookie 策略中间件之后和 MVC 中间件之前调用会话中间件。

用于将 Razor Pages 终结点添加到请求管道的终结点路由中间件(带有 MapRazorPages 的 UseEndpoints)。

14.ASP.NET Core中间件的执行顺序?

  • 异常/错误处理
  • HTTP 严格传输安全协议
  • HTTPS 重定向
  • 静态文件服务器
  • Cookie 策略实施
  • 路由
  • 身份验证
  • 会话
  • MVC
15.application builder的use和run方法有什么区别?

这两个方法都在start up class的configure方法里面调用。都是用来向应用请求管道里面添加中间件的。

Use方法可以调用下一个中间件的添加,而run不会。

16.dotnet core 管道里面的map拓展有什么作用?

可以针对不同的路径添加不同的中间件。

public void Configure(IApplicationBuilder app)

{

app.Map("/path1", Middleware1);

app.Map("/path2", Middleware2);

}

17.dot net core里面的路径是如何处理的?

路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。

主要有两种路径处理方式, 常规路径处理和属性路径处理。

常规路径处理就是用MapRoute的方式设定调用路径,属性路径处理是指在调用函数的上方设定一个路径属性。

18.dotnet core工程里面有哪些常见的工程文件?

global, launch setting,app settings,bundle config,bower, package。

19.ASP.NET Core项目如何设置IP地址和端口号?

可以使用Properties文件夹下的launchSettings配置文件来配置不同的启动方式的时候,分别配置IP和端口号。

20、startup 类是什么?在哪里调用 startup 类?

startup 类是 ASP.NET Core 应用程序的入口,用来配置应用,所有类似的应用程序必须有这个类。这个类是在 Program 类的 Main 函数中进行调用的。

21、startup 类中的 configservice 方法的作用是什么?

向应用程序添加 service 进入依赖注入容器。

22、startup 类中的 configure 方法的作用是什么?

用来定义整个应用响应请求的方式,可以配置中间件来处理路径、身份验证等。

23、管道中的 map 拓展有什么用?

针对不同的路径添加不同的中间件

24、ASP.NET Core 里的路径是怎么处理的?

路径出来是用来为进入的请求寻找处理函数的机制,所有的路径在函数影星开始时进行注册。目前有两种路径处理方式:常规路径处理方式和属性路径处理方式。常规路径处理方式指的是利用 MapRoute 的方式设定调用路径,属性路径处理值得是在调用函数上方设定一个路径属性。

25、ASP.NET Core 里面工程文件有哪些?

launchsetting 、appsettings 、Program 、Startup。

26、taghelper 是什么?

用来在服务器端使用 Razor 视图引擎创建 html 元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript对象笔记

JavaScript对象笔记 什么是JavaScript对象 JavaScript对象是一组键值对的集合&#xff0c;其中键是字符串&#xff08;通常是字符串&#xff0c;但也可以是符号&#xff09;&#xff0c;值可以是任何数据类型。 特点 动态性&#xff1a;可以在运行时添加、删除或更改属性。灵…

如何快速使用Unity 的UPR---1资源检测保姆级

关于我们的性能检测工具已经有很多了&#xff0c;比如UWA的或者是我们的Unity 的UPR 都是很好的&#xff0c;今天说一下UPR吧 官方网址 &#xff1a;UPR - Unity专业性能优化工具 这个是官方给的Demo 选择你的平台就可以 这个可以作为一个参考但是不是很建议用官方的因为我们…

Qt桌面应用开发 第九天(综合项目一 飞翔的鸟)

目录 1.鸟类创建 2.鸟动画实现 3.鼠标拖拽 4.自动移动 5.右键菜单 6.窗口透明化 项目需求&#xff1a; 实现思路&#xff1a; 创建项目导入资源鸟类创建鸟动画实现鼠标拖拽实现自动移动右键菜单窗口透明化 1.鸟类创建 ①鸟类中包含鸟图片、鸟图片的最小值下标和最大值…

【实体配置】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

Pytorch-GPU版本离线安装

最近在复现一项深度学习的工作&#xff0c;发现自己的pytorch是装的cpu版的(好像当时是直接加清华源&#xff0c;默认是cpu版本&#xff09;。从官网在线下载速度太慢&#xff0c;还时不时断开连接&#xff0c;我们可以配置conda的清华源去这个问题&#xff0c;但是考虑到是在用…

聊聊Flink:这次把Flink的触发器(Trigger)、移除器(Evictor)讲透

一、触发器(Trigger) Trigger 决定了一个窗口&#xff08;由 window assigner 定义&#xff09;何时可以被 window function 处理。 每个 WindowAssigner 都有一个默认的 Trigger。 如果默认 trigger 无法满足你的需要&#xff0c;你可以在 trigger(…) 调用中指定自定义的 tr…

[Redis#12] 常用类型接口学习 | string | list

目录 0.准备 1.string get | set set_with_timeout_test.cpp set_nx_xx_test.cpp mset_test.cpp mget_test.cpp getrange_setrange_test.cpp incr_decr_test.cpp 2.list lpush_lrange_test.cpp rpush_test.cpp lpop_rpop_test.cpp blpop_test.cpp llen_test.cpp…

网络安全之IP伪造

眼下非常多站点的涉及存在一些安全漏洞&#xff0c;黑客easy使用ip伪造、session劫持、xss攻击、session注入等手段危害站点安全。在纪录片《互联网之子》&#xff08;建议搞IT的都要看下&#xff09;中。亚伦斯沃茨&#xff08;真实人物&#xff0c;神一般的存在&#xff09;涉…

Spring Web开发(请求)获取JOSN对象| 获取数据(Header)

大家好&#xff0c;我叫小帅今天我们来继续Spring Boot的内容。 文章目录 1. 获取JSON对象2. 获取URL中参数PathVariable3.上传⽂件RequestPart3. 获取Cookie/Session3.1 获取和设置Cookie3.1.1传统获取Cookie3.1.2简洁获取Cookie 3. 2 获取和存储Session3.2.1获取Session&…

(SAST检测规则-1)Android - 权限管理漏洞

所属分类&#xff1a;Android - 权限管理漏洞缺陷详解&#xff1a;应用未正确实施最小权限原则或滥用已声明的权限可能导致敏感信息泄露。例如&#xff0c;恶意代码利用已授予的权限绕过用户授权&#xff0c;访问通讯录、位置、短信等敏感资源。部分开发者还可能滥用权限以执行…

EC2还原快照

EC2还原快照 AWS EC2 磁盘快照 是您 Amazon Elastic Block Store (EBS) 卷在特定时间点的增量备份。您可以使用快照创建 EBS 卷的副本&#xff0c;以便在出现故障时恢复数据或将数据迁移到其他区域。 创建磁盘快照 找到ec2实例挂载的磁盘&#xff0c;直接选择创建快照 等待创建…

oracle RAC各版本集群总结和常用命令汇总

oracle RAC学习 RAC介绍 RAC&#xff1a;高可用集群&#xff0c;负载均衡集群&#xff0c;高性能计算集群 RAC是⼀种⾼可⽤&#xff0c;⾼性能&#xff0c;负载均衡的share-everything的集群 8i:内存融合雏形 内存融合雏形&#xff08;Oracle Parallel Server&#xff09;…

【聚类】K-Means 聚类(无监督)及K-Means ++

1. 原理 2. 算法步骤 3. 目标函数 4. 优缺点 import torch import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.decomposition import PCA import torch.nn as nn# 数据准备 # 生成数据&#xff1a;100 个张量&#xff0c…

智慧银行反欺诈大数据管控平台方案(一)

智慧银行反欺诈大数据管控平台建设方案的核心在于通过整合先进的大数据技术和深度学习算法&#xff0c;打造一个全面、智能且实时的反欺诈系统&#xff0c;以有效识别、预防和应对各类金融欺诈行为。该方案涵盖数据采集、存储、处理和分析的全流程&#xff0c;利用多元化的数据…

搭建业务的性能优化指南

这是一篇搭建业务优化的心路历程&#xff0c;也是写给搭建业务的性能优化指南。 前言 直到今天&#xff0c;淘内的页面大多都迁移到了 SSR&#xff0c;从我们终端平台 - 搭建研发团队的视角看&#xff0c;业务大致可以分为两类 —— 搭建派 和 源码派。 这两者互不冲突&#xf…

【Db First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

搭建私有云存储

1、安装LNMP环境 yum install nginx -y yum install -y nginx mariadb-server php php-fpm php-mysqlnd systemctl restart nginx.service --- 启动Nginx systemctl start mariadb.service ---启动数据库 mysql -e create database lxdb character set utf8 ---创建数据库 my…

YOLO 标注工具 AutoLabel 支持 win mac linux

常见的标注工具&#xff0c;功能基础操作繁琐&#xff0c;无复制粘贴&#xff0c;标签无法排序修改&#xff0c;UI不美观&#xff0c;bug修正不及时&#xff0c;没有集成识别、训练、模型导出… 怎么办呢&#xff1f;AutoLabel它来了 Quick Start 一图胜千言 图像标注 支持YOL…

qt QGraphicsPolygonItem详解

1、概述 QGraphicsPolygonItem是Qt框架中QGraphicsItem的一个子类&#xff0c;它提供了一个可以添加到QGraphicsScene中的多边形项。通过QGraphicsPolygonItem&#xff0c;你可以定义和显示一个多边形&#xff0c;包括其填充颜色、边框样式等属性。QGraphicsPolygonItem支持各…

Linux网络_网络协议_网络传输_网络字节序

一.协议 1.概念 协议&#xff08;Protocol&#xff09; 是一组规则和约定&#xff0c;用于定义计算机网络中不同设备之间如何进行通信和数据交换。协议规定了数据的格式、传输方式、传输顺序等详细规则&#xff0c;确保不同设备和系统能够有效地互联互通。 在网络通信中&#…