跳到主要内容.NET Core WebAPI 开发工程师面试指南 | 极客日志C#
.NET Core WebAPI 开发工程师面试指南
.NET Core WebAPI 开发工程师面试涵盖基础框架、路由中间件、性能安全及测试部署。主要内容包括.NET Core 与 Framework 区别、依赖注入原理、API 创建流程、路由配置、中间件机制、异常处理策略。性能优化涉及缓存、异步编程与压缩;安全性强调 JWT、HTTPS 及 CORS 配置。测试推荐 xUnit 配合 Mock,部署支持 IIS、Docker 及 Azure 云环境。
清心4.2K 浏览 在面试中,.NET Core WebAPI 开发工程师的问题通常涉及基础知识、框架机制、性能优化、安全性、测试及部署等方面。以下是经典问题及建议回答。
一、.NET Core 基础
1. 什么是 .NET Core,和 .NET Framework 有什么区别?
.NET Core 是一个开源的、跨平台的框架,适用于构建 Web 应用、云服务、控制台应用等。与仅支持 Windows 的 .NET Framework 相比,.NET Core 支持 Windows、Linux 和 macOS。其模块化设计减少了应用体积,支持更快的启动速度和更低的内存占用。
2. 什么是依赖注入(DI)?为什么要使用依赖注入?
依赖注入是一种设计模式,通过将对象的依赖关系从内部解耦,使模块间不再直接依赖,而是通过外部传入。这提高了代码的可测试性和可维护性。在 .NET Core 中,DI 是内置的,可在 Startup.cs 的 ConfigureServices 方法中注册服务。
3. 如何在 .NET Core 中创建一个 Web API?
- 默认生成的
Startup.cs 包含配置服务和中间件的代码,如注册 AddControllers 服务,启用控制器支持,以及配置路由和中间件(app.UseRouting() 和 app.UseEndpoints())。
- 控制器类继承
ControllerBase 来创建 API。
[ApiController]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Hot", "Sweltering"
};
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
}).ToArray();
}
}
dotnet new webapi -n MyApi
二、Web API 相关
1. 如何实现 Web API 路由?
路由由 Route 特性或 Map 方法定义,支持静态或动态路径参数。
- 静态路由:如
[Route("api/[controller]")]。
- 动态路由:例如
[Route("api/[controller]/{id}")]。
结合 HTTP 动作特性(如 [HttpGet]、[HttpPost])标识请求方法。
2. 什么是 ASP.NET Core 的中间件?
中间件是处理请求和响应的组件,位于请求管道中。每个中间件可决定是否继续处理或终止请求,并可修改请求/响应。常见中间件包括身份验证、授权、日志、错误处理等。
注册于 Startup.cs 的 Configure 方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
3. Web API 如何处理错误和异常?
可通过全局异常处理中间件或自定义异常过滤器捕获错误。
自定义异常过滤器示例:
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet]
public IActionResult GetProduct(int id)
{
try
{
var product = _productService.GetProductById(id);
if (product == null) throw new NotFoundException("Product not found.");
return Ok(product);
}
catch (NotFoundException ex)
{
return NotFound(new { message = ex.Message });
}
}
}
全局异常处理中间件:
可使用 UseExceptionHandler 进行全局捕获。
app.UseExceptionHandler("/Home/Error");
三、性能优化与安全性
1. 如何优化 Web API 性能?
- 数据缓存:使用 Redis 或 MemoryCache 缓存频繁请求结果。
- 减少不必要的数据加载:使用分页、筛选器限制返回量。
- 并行处理:使用
async/await 避免阻塞线程。
- 压缩响应数据:启用 Gzip 或 Brotli 压缩。
2. 如何确保 Web API 的安全性?
- 身份验证和授权:使用 JWT 或 OAuth2 验证用户身份。
- 数据加密:使用 HTTPS 防止中间人攻击。
- 输入验证:防止 SQL 注入、XSS 攻击,使用参数化查询。
- CORS:控制允许访问的域。
3. 什么是 CORS,如何在 Web API 中配置 CORS?
CORS(跨源资源共享)允许浏览器向不同源服务器发起请求,防止恶意跨域请求。
在 Startup.cs 中配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigin", builder =>
builder.WithOrigins("http://example.com")
.AllowAnyHeader()
.AllowAnyMethod());
});
}
public void Configure(IApplicationBuilder app)
{
app.UseCors("AllowSpecificOrigin");
}
四、测试与部署
1. 如何对 .NET Core Web API 进行单元测试?
通常使用 xUnit、NUnit 或 MSTest。策略包括 Mock 外部依赖(如 Moq)和编写控制器测试。
public class WeatherForecastControllerTests
{
private readonly WeatherForecastController _controller;
public WeatherForecastControllerTests()
{
_controller = new WeatherForecastController();
}
[Fact]
public void Get_Returns200Ok()
{
var result = _controller.Get();
var okResult = Assert.IsType<OkObjectResult>(result);
Assert.Equal(200, okResult.StatusCode);
}
}
2. 如何部署 .NET Core Web API?
- IIS 部署:发布为自包含包。
- Docker 部署:容器化便于跨平台。
- Azure 部署:利用云管理工具。
- 编译项目:
dotnet publish
- 创建 Dockerfile(如适用):
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
COPY ./bin/Release/net5.0/publish/ .
ENTRYPOINT ["dotnet", "MyApi.dll"]
docker build -t myapi .
docker run -d -p 80:80 myapi
以上是常见的 .NET Core Web API 开发工程师面试问题及答案,涵盖基础知识到高级应用。
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
- JSON美化和格式化
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online