ASP.NET Core 面试题整理_.net core面试-程序员宅基地

技术标签: asp.net  面试题  

1、ASP.NET Core 比 ASP.NET 的优势在哪?

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

  • 开源,ASP.NET Core 在 Github 上是开源的,意味着更安全以及更好的服务;

  • 部署灵活,ASP.NET Core 运行时可以作为应用的一部分进行部署,也可以集中安装在Web 服务器上。另外,也适配 Docker 容器;

  • 性能更强,ASP.NET Core 处理请求的性能更好,从而能处理更多的请求;

2、ASP.NET Core 的特性有哪些?

  • 支持依赖注入,ASP.NET Core 内置的依赖项注入;

  • 内置日志框架,并且可以扩展;

  • 可以通过命令来创建、运行应用程序;

  • 对异步编程更好的支持;

  • 引入新的、快速跨平台的 Web 服务器 — Kestrel;

  • 支持 SignalR ;

  • 可基于环境进行配置 ,appSettings.json

欢迎补充。

 3、ASP.NET Core Filter如何⽀持依赖注⼊?

  • 全局注册

public void ConfigureServices(IServiceCollection services)
{
    //全局注册异常过滤器
    services.AddControllersWithViews(option=> {
        option.Filters.Add<ExecptionFilter>();
    });
}
  • TypeFilter 方式注册

[TypeFilter(typeof(ExecptionFilter))]
public IActionFilter Index()
{
      return View();
}
  • ServiceFilter 方式注册

    使用 ServiceFilter 必须要注册Filter这类,可以标记在控制器和方法里

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddSingleton<ExecptionFilter>();
}

[ServiceFilter(typeof(ExecptionFilter))]
public IActionFilter Index()
{
    return View();
}

4、ASP.NET Core Filter 的注册方式有哪些?

方法注册:只对标记的方法有效

控制器注册:对控制器中的所有方法有效

全局注册:对整个项目生效

5、ASP.NET Core 的 Startup 类是什么?

Startup 类是 ASP.NET Core 应用程序的入口,ASP.NET Core 应用不可以缺少,这个类主要用来配置应用程序。类名不一定叫 "Startup" 该类在 Program Main方法里进行调用。

Startup 类有两个方法

ConfigService 方法可以添加 Service 到依赖注入容器

Cofnigure 方法定义整个应用如何响应 HTTP 请求。可配置中间件,一些常用的中间件要熟悉和了解并配置。

6、ApplicationBuilder 的 Use 和 Run 方法有什么区别?

这两个都是向请求管道添加中间件,Use 会进入下一个中间件,Run 不会。Run 是终结点。

7、什么是中间件?

中间件指的是注入到应用中处理请求和响应的的组件。而这个过程我们称之为请求管道。

8、ApplicationBuilder Map 有什么用?

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

9、ASP.NET Core 工程文件有哪些?

launchSetting,appSettings,Program,Startup

10、ASP.NET Core 中服务的生命周期有哪些?

  • Singleton 单例模式,只有一个服务实例被创建,这个实例存储在内存,可以在整个应用程序中使用。

services.AddSingleton<ITaskService, TaskService>();
  • Scoped 作用域,会在每个请求都创建一个服务的实例,请求的过程用的是同一实例。

services.AddScoped<ITaskService, TaskService>();
  • Transient 瞬态,服务每次被调用的时候会创建一个服务实例,这种比较适合轻量级、无状态的服务。

services.AddTransient<ITaskService, TaskService>();

11、中间件的应用场景有哪些?列举一些常用的中间件。

  • 开发环境的异常处理:UseDeveloperExceptionPage();

  • ⽣产环境的异常处理:UseExceptionHandler();

  • HTTP 严格传输安全协议:UseHsts();添加 Strict-Transport-Security 标头

  • HTTPS 重定向:UseHttpsRedirection();将 HTTP 重定向到 HTTPS

  • 启用静态文件:UseStaticFiles();

  • 启用 Cookie 策略:UseCookiePolicy();

  • 路由请求:UseRouting();

  • 身份验证:UseAuthentication();  对用户进行身份验证,通过后才可心访问安全资源

  • 授权:UseAuthorization();  授权用户访问安全资源

  • 会话中间件:UseSession();

  • 终节点路由:UseEndpoints();

    就列这些,注意它们的执行顺序。

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

打开 Properties 文件夹下的 launchSettings 文件进行配置。

13、什么是依赖注入?依赖注入的方式有哪些?什么是控制反转?依赖注入的原理?

ASP.NET Core 内置依赖注入,这方面的知识点也就成为一些面试官经常考查的点。通过这些考查反应面试者对依赖注入的理解。在公众号上我也写了一篇文章,希望有助于理解。

.Net Core上的依赖注入和控制反转

14、 ASP.NET Core 异常处理有哪些方案?

  • 创建一个 YldController 继承 Controller,重写 OnActionExecuted。后面创建的 Controller 都继承 YldController

namespace FirstWebApp.Controllers
{
    public class YldController : Controller
    {
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            if (context.Exception != null)
            {
                //处理异常,记录异常信息等
            }

            base.OnActionExecuted(context);
        }
    }

    //创建 HomeController ,继承 YldController
    public class HomeController : YldController
    {
        public IActionResult Index()
        {
            return View();
        }
    }
}
  • 继承 ActionFilterAttribute 类

public class ExceptionActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        if(context.Exception != null)
        {
            //处理异常,记录异常信息等
        }
        base.OnActionExecuted(context);
    }

    public override void OnResultExecuted(ResultExecutedContext context)
    {
        if (context.Exception != null)
        {
            //处理异常,记录异常信息等
        }
        base.OnResultExecuted(context);
    }
}

 使用方式参考问题3

  • 继承 IExceptionFilter 接口


public class YldExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        if(context.Exception != null)
        {
            //省略...
        }

    }
}
  • 使用 ExceptionHandler


public void Configure(IApplicationBuilder app,IHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseRouting();

    app.UseEndpoints(endpoints =>
                     {
                         endpoints.MapControllers();
                     });

}
  • 自定义中间件

public class ErrorMiddleware
{

    private readonly RequestDelegate next;

    public ErrorMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

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


public void Configure(IApplicationBuilder app,IHostEnvironment env)
{
    //启用自定义中间件
    app.UseMiddleware(typeof(ErrorMiddleware));

    app.UseRouting();

    app.UseEndpoints(endpoints =>
                     {
                         endpoints.MapControllers();
                     });

}

15、 什么是ASP.NET Core ?

ASP.NET Core 不是 ASP.NET 的升级版本。ASP.NET Core 完全重写了与 .NET Core 框架一起使用的功能。它更快、可配置、模块化、可扩展和跨平台支持。它可以通过 .NET 标准框架与 .NET Core 和 .NET 框架一起使用。

16、 ASP.NET Core 可以与 .NET 4.x 框架一起使用?

可以的。

17、 什么是请求委托?

请求委托处理每个 HTTP 请求并用于构建请求管道。它可以使用 Run、Map 和 Use 扩展方法进行配置。请求委托可以是内联匿名方法(称为内联中间件)或可重用类。这些类或内联方法称为中间件。

18、ASP.NET Core 中的 Host是什么?

Host 封装了应用程序所有资源。启动时,ASP.NET Core 应用程序创建主机。主机封闭的资源包括:

  • HTTP 服务器的实现

  • 依赖注入

  • 配置

  • 日志

  • 中间件

19、介绍下缓存和响应缓存及内存缓存(MemoryCache)?

缓存通过减少对实际数据的调用次数,提高应用程序性能和扩展性。缓存制作数据副本并将其存储,而不是从原始源生成数据。

响应缓存最适合不经常更改的数据,响应缓存标头控制响应控制。ResponseCache 属性为这些缓存头设置额外的属性。

内存缓存是 ASP.NET Core 最简单的缓存方式,它将数据存储在 Web 服务器的内存中。内存缓存可以存储任何对象。


public void ConfigureServices(IServiceCollection services)
{
    services.AddMemoryCache(); //启用内存缓存
}

如果有多台服务器时,需要分布式缓存,分布式缓存可以避免缓存一致性问题。它将内存卸载到外部进程。

分布式缓存优点:

  • 跨客户端请求到多个服务器的数据是一致的;

  • 服务重新启动和部署期间数据保持活动状态;

  • 数据不是使用本地内存;

20、什么是XSRF 或 CSFR?如何防止ASP.NET Core 中的跨站点请求伪造(XSRF/CSFR)攻击?

跨站点请求伪造 (也称为 XSRF 或 CSRF) 是对 web 托管应用程序的攻击,恶意 web 应用可能会影响客户端浏览器和信任该浏览器的 web 应用之间的交互。这些攻击是可能的,因为 web 浏览器会自动向网站发送每个请求的身份验证令牌。这种形式的攻击也称为 一键式攻击 或 会话 riding ,因为攻击利用用户以前的经过身份验证的会话。

ASP.NET Core 阻止跨站点请求伪造 (XSRF/CSRF) 攻击

过了年,马上就到金三银四了,有意跳槽的小伙伴们趁着过年这段时间好好准备吧。加油,骚年!

最后,祝大家学习愉快!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sud423/article/details/122687095

智能推荐

tera term的TTL脚本命令之findfirst、findnext 和 findclose_ttl脚本 find-程序员宅基地

文章浏览阅读1k次。findfirst搜索匹配字符串的第一个文件。findfirst &lt;dir handle&gt; &lt;file name&gt; &lt;strvar&gt;注释findfirst命令搜索与指定文件名&lt;file name&gt;匹配的第一个文件。如果找到该文件,则此命令返回的目录句柄保存在&lt;dir handle&gt;中,返回的第一个文件名保存在&lt;..._ttl脚本 find

r语言ggplot画两条曲线_如何用R语言绘制生存曲线?-程序员宅基地

文章浏览阅读940次。关于如何用R语言绘制生存曲线的问题已经有太多大佬说过了,我也来凑个热闹以下是视频如何用R语言绘制生存曲线_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com这次就不详细解释了,直接放代码了rm(list=ls())library(openxlsx)library(survival)library(ggplot2)library(ggpubr)librar..._ggplot2怎么画生存曲线

Lasso回归与岭回归_岭回归的损失函数-程序员宅基地

文章浏览阅读441次。正则化正则化是指在损失函数后面添加一个范数,以此防止模型过拟合的方式。范数定义:∣∣x∣∣p=(∑i=1n∣x∣p)1p||x||_p = (\sum_{i=1}^{n}|x|^p)^\frac{1}{p}∣∣x∣∣p​=(i=1∑n​∣x∣p)p1​1)p = 1时,即L1范数:∣∣x∣∣p=(∑i=1n∣x∣)||x||_p = (\sum_{i=1}^{n}|x|)∣∣x∣∣p​=(i=1∑n​∣x∣)2)p = 2时,即L2范数:∣∣x∣∣p=(∑i=1n∣x∣2)12||_岭回归的损失函数

【STM32】可变焦、聚焦摄像头驱动电路与驱动程序——两相四线步进电机驱动_程序控制镜头对焦-程序员宅基地

文章浏览阅读1.1w次,点赞25次,收藏135次。目录:总体介绍1.步进电机简介1)什么是步进电机[^脚注]?2)为什么需要驱动电路去驱动步进电机,而不用IO口直接驱动?3)步进电机的几个概念:2.基础硬件测试驱动1)整体原理图2)PCB电路3)3D_PCB2.STM32控制驱动程序设计1)端口定义与函数声明2)步进电机驱动函数3)按键简单调用转动步进电机【正反转】3.效果展示1).调试图连接图注:本文仅用于学习交流分享,[若有不妥之处,请指正..._程序控制镜头对焦

Android如何实现获取手机CPU的温度?-程序员宅基地

文章浏览阅读7.8k次,点赞3次,收藏10次。Android如何实现获取手机CPU的温度?在做项目过程中,有时需要获取手机CPU的温度。目前市面上常见的CPU主要有两种:MTK(联发科)、Qualcomm(高通)。当然还有我们华为的海思麒麟CPU,以及三星的CPU。后两种CPU在本篇文章中就不做展开,有兴趣的同学,可以自行去研究研究。通过研究发现,CPU的信息基本都是在/sys/class/thermal/目录下,通过adb shell...

C/C++ 静态代码检查工具cppCheck_cppcheck自定义规则-程序员宅基地

文章浏览阅读850次。Cppcheck是一个用于C/C++代码的静态分析工具,它可以帮助开发者检测代码中的错误;Cppcheck可以检测出许多类型的错误,包括语法错误、未使用的函数、内存泄漏、未初始化的变量等;Cppcheck还支持用户自定义规则,这使得开发者可以根据自己的需求定制Cppcheck的行为;使用--suppress如果你想要忽略某些警告,可以在命令行中使用 --suppress 选项。_cppcheck自定义规则

随便推点

使用Windows API实现模态窗口_c++ 通过hwnd 设置为模态框-程序员宅基地

文章浏览阅读9.4k次,点赞2次,收藏16次。所谓模态窗口(modal window),又叫做模式窗口,一般是指应用程序中那些任务比较紧要的窗口。只要它们存在,它们便会阻止用户访问其他窗口(或者是阻止用户访问其祖先窗口)。在windows中,使用DialogBoxParam显示的对话框就是模态的。虽然模态对话框在windows中很普遍,但是并没有SDK级别的API,可以将一个窗口变为模态显示。不过在同为微软提供的MFC/WTL框架中有这样的A_c++ 通过hwnd 设置为模态框

已解决Error:java: Compilation failed: internal java compiler error-程序员宅基地

文章浏览阅读6.8w次。Error:java: Compilation failed: internal java compiler error是编译器在编译Java代码时遇到的内部错误。_java: compilation failed: internal java compiler error

宁波市第32届中小学生程序设计竞赛(初中组) 母鸡下蛋_问题 c: 母鸡下蛋-程序员宅基地

文章浏览阅读1.6k次。问题 C: 母鸡下蛋鸡国中的母鸡最擅长下蛋了,MGMG 是鸡国中一只以下蛋产量高而闻名全鸡国的母鸡。 鸡国专供下蛋的 n 个鸡窝呈一字排列在鸡国的“下蛋中心”,从左到右依次编号为 1 到n。每个鸡窝都有一个最大可下蛋的量,其中第 i 个鸡窝的最大可下蛋量为 ci 。有时候由于MGMG 产量实在太大而无法在一个鸡窝中下完所有的蛋,不得不转移到隔壁的鸡窝继续下蛋,如果隔壁的鸡窝还是不能让它_问题 c: 母鸡下蛋

nodejs+vue+elementui咖啡商城销售系统qi99g_vue node商城-程序员宅基地

文章浏览阅读873次,点赞15次,收藏18次。通过咖啡在线销售这个平台,可以使用户足不出户就可以了解现今的咖啡信息,为用户提供了极大的方便,咖啡在线销售的主要功能包含:店铺信息管理、注册用户管理、商品信息管理等模块。前台子系统为用户提供注册、登陆的功能,以及浏览咖啡,购买咖啡,提交订单后采用模拟的金额支付,实现咖啡的购买流程。后台子系统供网站内部管理人员使用,可以咖啡修改和删除、注册用户管理、店铺信息管理等功能,对用户的订单进行管理。另外一部分是网站的后台管理部分,这部分包括:对普通用户的账号进行删除、更改、查询管理,咖啡的管理、订单的管理等。_vue node商城

Lingo与最短路问题_lingo最短路问题-程序员宅基地

文章浏览阅读1.2w次,点赞4次,收藏82次。Lingo与最短路问题 代码如下:!最短路问题;model:data: n=10;enddatasets: cities/1..n/: F; !10个城市; roads(cities,cities)/ 1,2 1,3 2,4 2,5 2,6 3,4 3,5 3,6 4,7 4,8 5,7 5,8 5..._lingo最短路问题

C++进程间通信的多种方式及实现-程序员宅基地

文章浏览阅读6k次,点赞7次,收藏66次。多进程通信_c++进程间通信

推荐文章

热门文章

相关标签