ASP.net core的面试题20道

ASP.net core的面试题20道
最新回答
红酒高跟鞋

2026-10-22 00:42:27

以下是20道ASP.NET Core相关面试题及答案:

第1题:什么是ASP.NET Core?ASP.NET Core不是ASP.NET的简单升级版本,而是遵循.NET标准架构的全新框架。其核心特点包括:

  • 跨平台:支持Windows、Linux、macOS三大操作系统。
  • 高性能:基于轻量级模块化设计,请求处理效率显著提升。
  • 易配置:通过appsettings.json和Startup类实现灵活配置。
  • 可扩展性:依赖注入、中间件等机制支持高度定制化开发。

第2题:ASP.NET Core有哪些核心功能?

  • 依赖注入(DI):内置容器支持构造函数注入。
  • 日志系统:统一架构支持多日志提供程序(如NLog、Serilog)。
  • Kestrel服务器:跨平台网络服务器,可独立运行(无需IIS/Nginx)。
  • 命令行工具:通过dotnet CLI快速创建、运行项目。
  • 配置管理:使用appsettings.json文件分层配置。
  • Startup类:集中注册服务和中间件。
  • 异步编程:全面支持async/await模式。
  • 实时通信:内置WebSocket和SignalR支持。
  • 安全防护:CSRF、CORS等跨站请求防护机制。

第3题:.NET Core相比.NET Framework的优势?

  • 跨平台支持:运行于Windows/Linux/macOS。
  • 自包含部署:所有依赖与程序打包,无需额外安装。
  • 更高性能:优化请求处理流程,吞吐量提升30%以上。
  • 灵活配置:支持Docker、Kubernetes等云原生部署方式。

第4题:什么是Meta Packages?Meta Packages是包含所有ASP.NET Core依赖的聚合包,名为Microsoft.AspNetCore.App。通过引用此包可自动引入框架所需的核心组件,简化依赖管理。

第5题:.NET Core应用能否与.NET 4.x库兼容?可以。通过.NET Standard规范实现跨框架兼容,但需注意部分API在.NET Core中可能存在行为差异或不可用。

第6题:什么是Startup类?Startup类是ASP.NET Core应用的入口,必须包含以下两个方法:

  • ConfigureServices:注册服务到DI容器。
  • Configure:配置中间件请求处理管道。类名可自定义,但需在Program.cs中通过WebApplication.CreateBuilder(args).Build().Run()指定。

第7题:Startup类的ConfigureServices方法作用?用于向DI容器添加服务,例如:

services.AddMvc(); // 添加MVC服务services.AddSingleton<IMyService, MyService>(); // 注册单例服务

第8题:Startup类的Configure方法作用?定义HTTP请求处理管道,常用参数包括:

  • IApplicationBuilder app:构建中间件管道。
  • IWebHostEnvironment env:获取运行环境信息。示例配置:
app.UseRouting();app.UseAuthentication(); // 添加认证中间件app.UseEndpoints(endpoints => endpoints.MapControllers());

第9题:什么是中间件(Middleware)?中间件是处理HTTP请求和响应的组件,按顺序组成请求管道。每个中间件可:

  • 预处理请求(如认证、日志)。
  • 调用下一个中间件(通过await _next(context))。
  • 后处理响应(如异常处理)。

第10题:ApplicationBuilder的Use与Run方法区别?

  • Use:可调用下一个中间件,常用于条件分支或终端中间件前的预处理。
  • Run:终端中间件,不调用后续中间件,通常用于返回静态响应。示例:
app.Use(async (context, next) => { await next(); // 调用下一个中间件});app.Run(async context => await context.Response.WriteAsync("Hello");

第11题:管道中的Map扩展作用?根据路径分支处理请求,例如:

app.Map("/admin", adminApp => { adminApp.UseMiddleware<AdminMiddleware>();});

第12题:路径处理机制?

  • 常规路径:通过MapRoute在Startup中定义,如:endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}");
  • 属性路由:在控制器或方法上使用[Route]特性,如:[Route("api/[controller]")]public class ProductsController : Controller { [HttpGet("{id}")] public IActionResult Get(int id) { ... }}

第13题:如何激活Session功能?

  1. 安装Microsoft.AspNetCore.Session包。
  2. 在ConfigureServices中添加服务:services.AddDistributedMemoryCache(); // 或其他缓存实现services.AddSession();
  3. 在Configure中启用中间件:app.UseSession();

第14题:.NET Core工程文件类型?

  • .csproj:项目配置文件。
  • launchSettings.json:开发环境启动配置(如Kestrel端口)。
  • appsettings.json:分层配置文件(Development/Production环境)。
  • Program.cs:应用入口,配置主机和中间件管道。

第15题:什么是Tag Helper?Tag Helper是服务器端组件,用于在Razor视图中生成HTML元素。例如:

<a asp-controller="Home" asp-action="Index">Home</a>

生成带路由信息的<a>标签。

第16题:如何禁用Tag Helper?在HTML元素前添加!,如:

<!input asp-for="Name" /> <!-- 禁用asp-for特性 -->

第17题:什么是Razor页面?Razor Pages是基于页面的开发模型,使用@page指令标记路由,适合内容型网站。文件结构为.cshtml(视图+代码)和.cshtml.cs(页面模型)。

第18题:Razor页面数据绑定?通过[BindProperty]特性实现模型绑定:

[BindProperty]public InputModel Input { get; set; }

表单提交时自动映射到Input属性。

第19题:如何在Controller中注入Service?

  1. 在ConfigureServices中注册服务:services.AddScoped<IMyService, MyService>();
  2. 在Controller构造函数中声明依赖:public class HomeController : Controller { private readonly IMyService _service; public HomeController(IMyService service) => _service = service;}

第20题:依赖注入的服务生命周期?

  • Singleton:通过AddSingleton注册,整个应用生命周期内共享同一实例。
  • Transient:通过AddTransient注册,每次请求服务时创建新实例。
  • Scoped:通过AddScoped注册,每个HTTP请求范围内共享实例(如数据库上下文)。系统自动管理资源释放,无需手动处置。