当前位置: 首页 > 工具软件 > ASP.NET > 使用案例 >

ASP.NET Core 面试题整理

夹谷奇
2023-12-01

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) 攻击

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

最后,祝大家学习愉快!

 类似资料: