找回密码
 会员注册
查看: 340|回复: 0

ASP.NET Core 面试题整理

[复制链接]

1389

主题

5

回帖

496万

积分

管理员

积分
4962988
发表于 2024-2-29 08:54:31 | 显示全部楼层 |阅读模式

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如何⽀持依赖注⼊?

  • 全局注册

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. //全局注册异常过滤器
  4. services.AddControllersWithViews(option=> {
  5. option.Filters.Add<ExecptionFilter>();
  6. });
  7. }
复制代码
  • TypeFilter 方式注册

  1. [TypeFilter(typeof(ExecptionFilter))]
  2. public IActionFilter Index()
  3. {
  4. return View();
  5. }
复制代码
  • ServiceFilter 方式注册

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

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllersWithViews();
  4. services.AddSingleton<ExecptionFilter>();
  5. }
  6. [ServiceFilter(typeof(ExecptionFilter))]
  7. public IActionFilter Index()
  8. {
  9. return View();
  10. }
复制代码

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 单例模式,只有一个服务实例被创建,这个实例存储在内存,可以在整个应用程序中使用。

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

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

  1. 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

  1. namespace FirstWebApp.Controllers
  2. {
  3. public class YldController : Controller
  4. {
  5. public override void OnActionExecuted(ActionExecutedContext context)
  6. {
  7. if (context.Exception != null)
  8. {
  9. //处理异常,记录异常信息等
  10. }
  11. base.OnActionExecuted(context);
  12. }
  13. }
  14. //创建 HomeController ,继承 YldController
  15. public class HomeController : YldController
  16. {
  17. public IActionResult Index()
  18. {
  19. return View();
  20. }
  21. }
  22. }
复制代码
  • 继承 ActionFilterAttribute 类

  1. public class ExceptionActionFilterAttribute : ActionFilterAttribute
  2. {
  3. public override void OnActionExecuted(ActionExecutedContext context)
  4. {
  5. if(context.Exception != null)
  6. {
  7. //处理异常,记录异常信息等
  8. }
  9. base.OnActionExecuted(context);
  10. }
  11. public override void OnResultExecuted(ResultExecutedContext context)
  12. {
  13. if (context.Exception != null)
  14. {
  15. //处理异常,记录异常信息等
  16. }
  17. base.OnResultExecuted(context);
  18. }
  19. }
复制代码

 使用方式参考问题3

  • 继承 IExceptionFilter 接口

  1. public class YldExceptionFilter : IExceptionFilter
  2. {
  3. public void OnException(ExceptionContext context)
  4. {
  5. if(context.Exception != null)
  6. {
  7. //省略...
  8. }
  9. }
  10. }
复制代码
  • 使用 ExceptionHandler

  1. public void Configure(IApplicationBuilder app,IHostEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. else
  8. {
  9. app.UseExceptionHandler("/Home/Error");
  10. }
  11. app.UseRouting();
  12. app.UseEndpoints(endpoints =>
  13. {
  14. endpoints.MapControllers();
  15. });
  16. }
复制代码
  • 自定义中间件

  1. public class ErrorMiddleware
  2. {
  3. private readonly RequestDelegate next;
  4. public ErrorMiddleware(RequestDelegate next)
  5. {
  6. this.next = next;
  7. }
  8. public async Task Invoke(HttpContext context)
  9. {
  10. try
  11. {
  12. await next(context);
  13. }
  14. catch (Exception ex)
  15. {
  16. //处理异常
  17. }
  18. }
  19. }
  20. public void Configure(IApplicationBuilder app,IHostEnvironment env)
  21. {
  22. //启用自定义中间件
  23. app.UseMiddleware(typeof(ErrorMiddleware));
  24. app.UseRouting();
  25. app.UseEndpoints(endpoints =>
  26. {
  27. endpoints.MapControllers();
  28. });
  29. }
复制代码

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 服务器的内存中。内存缓存可以存储任何对象。

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddMemoryCache(); //启用内存缓存
  4. }
复制代码

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

分布式缓存优点:

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

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

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

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

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

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

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

最后,祝大家学习愉快!


来源:https://blog.csdn.net/sud423/article/details/122687095
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 01:01 , Processed in 0.310697 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表