前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一看就想走的.NET面试题

一看就想走的.NET面试题

作者头像
郑子铭
发布于 2025-04-22 02:36:16
发布于 2025-04-22 02:36:16
18500
代码可运行
举报
运行总次数:0
代码可运行

群友提供的某公司的.NET面试题,他们说看到这种试题就想走。小编把面试题给大家贡献出来,供大家参考。

先列出试题,大家尝试做一做。

面试题

1、startup 类是什么?在哪里调用 startup 类?configservice、configure 方法是什么?

2、描述一下依赖注入后的服务生命周期?

3、说说脚本在请求 Web CoreApi 的时候,为什么会发生跨域问题?如何解决?

4、说说你了解到的鉴权授权技术。

参考答案:

1、Startup 类是什么?在哪里调用 Startup 类?ConfigureServicesConfigure 方法是什么?

Startup 类的作用

Startup 类是 ASP.NET Core 应用程序的入口之一,负责配置应用程序的服务和请求处理管道。 它在应用启动时由 Web 主机(Web Host)或泛型主机(Generic Host) 进行调用。

Startup 类的调用

ASP.NET Core 在 Program.cs创建和配置 WebHost 时,会调用 Startup 类的构造函数,然后执行其 ConfigureServicesConfigure 方法。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

在这个过程中,Startup 类的 ConfigureServicesConfigure 方法会被调用。

ConfigureServices 方法

作用:注册和配置应用程序所需的服务(依赖注入 DI)。

ConfigureServices 方法中,我们可以向 IoC 容器(依赖注入容器)中添加 服务,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddDbContext<ApplicationDbContext>();
    services.AddScoped<IMyService, MyService>();
}

services 参数是 IServiceCollection 类型,ASP.NET Core 通过它管理应用的依赖关系。

Configure 方法

作用:配置 HTTP 请求处理管道(中间件

Configure 方法中,我们可以定义 中间件(Middleware) 的执行顺序,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

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

这里 UseRouting()UseAuthorization()UseEndpoints() 就是 中间件,它们决定了请求如何被处理。


2、描述一下依赖注入后的服务生命周期?

ASP.NET Core 提供 三种依赖注入(DI)生命周期

Transient(瞬时)

  • 每次请求都会创建一个新的实例。
  • 适用于 无状态、轻量级的服务
  • 例子:services.AddTransient<IMyService, MyService>();

Scoped(作用域)

  • 每个 HTTP 请求 共享同一个实例。
  • 适用于 数据库上下文(DbContext)或业务逻辑类
  • 例子:services.AddScoped<IMyService, MyService>();
  • 注意:Scoped 作用域仅在 Web 请求范围内有效,在单独线程或后台任务中不会自动生效!

Singleton(单例)

  • 整个应用程序生命周期内只有一个实例
  • 适用于 全局共享资源,如缓存、日志、配置管理
  • 例子:services.AddSingleton<IMyService, MyService>();
  • 注意:单例服务要避免使用有状态的对象,否则可能会引发线程安全问题!

3、脚本请求 Web API 时为什么会发生跨域(CORS)问题?如何解决?

什么是跨域问题?
  • 同源策略(Same-Origin Policy) 限制了浏览器只能访问 相同协议、相同域名、相同端口 的资源。
  • 如果前端 (http://localhost:3000) 访问后端 **(http://localhost:5000/api/data)**,就会触发 跨域请求,浏览器默认会 阻止 这样的请求。
如何解决跨域问题?

使用 CORS(跨域资源共享)ConfigureServices 方法中,启用 CORS:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
services.AddCors(options =>
{
    options.AddPolicy("AllowAll",
        builder => builder.AllowAnyOrigin()
                          .AllowAnyMethod()
                          .AllowAnyHeader());
});

Configure 方法中应用 CORS:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.UseCors("AllowAll");

使用 Response Header 允许跨域服务器响应时添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Response.Headers.Add("Access-Control-Allow-Origin", "*");

使用代理(Proxy)转发请求

  • 让前端通过 代理服务器(如 Nginx 或 Webpack DevServer)转发 API 请求,从而避免跨域。

JSONP(仅支持 GET 请求)

  • 通过 <script> 标签发送 JSONP 请求,但现代 API 通常不推荐使用 JSONP

4、说说你了解到的鉴权授权技术

在 .NET Core 中,认证(Authentication)授权(Authorization) 是 Web 安全的核心部分。

1. 鉴权方式(Authentication)

鉴权是 确认用户身份 的过程,常见方法包括:

JWT(JSON Web Token

  • 无状态 认证方式,适用于 前后端分离 场景。
  • 服务器生成一个加密的 Token,前端请求时带上 Authorization: Bearer <token> 头部。
  • 服务器端用 JwtBearer 进行验证:services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey")) }; });

Cookie 认证

  • 适用于 传统的服务器渲染应用(如 MVC)
  • 用户登录后,服务器在浏览器设置 Set-Cookie,后续请求自动带上 Cookie

OAuth2 + OpenID Connect

  • 用于第三方登录(如 GitHub、Google、WeChat)。
  • ASP.NET Core 提供 Microsoft.AspNetCore.Authentication.OpenIdConnect 进行集成。
2. 授权方式(Authorization)

授权是 确认用户是否有权限访问资源 的过程,常见方式包括:

基于角色的授权(Role-based Authorization)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Authorize(Roles = "Admin")]
public IActionResult AdminOnly()
{
    return Ok("只有管理员可以访问");
}

基于策略的授权(Policy-based Authorization)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
services.AddAuthorization(options =>
{
    options.AddPolicy("AgeOver18", policy =>
        policy.RequireAssertion(context =>
            context.User.HasClaim(c => c.Type == "Age" && int.Parse(c.Value) >= 18)));
});

控制器中应用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Authorize(Policy = "AgeOver18")]
public IActionResult AdultOnly()
{
    return Ok("成年人才能访问");
}

基于声明的授权(Claims-based Authorization)

  • 检查用户的 Claims 是否包含特定的值,适用于更细粒度的权限控制。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C# .NET面试系列七:ASP.NET Core
在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务:
GoodTime
2024/03/08
6430
C# .NET面试系列七:ASP.NET Core
【ASP.NET Core 基础知识】--依赖注入(DI)--在ASP.NET Core中使用依赖注入
在ASP.NET Core中实现依赖注入的第一步是配置依赖注入。ASP.NET Core使用了一个称为依赖注入容器(DI Container)的组件来管理对象之间的依赖关系。DI容器在应用程序启动时被配置,并且可以在应用程序的整个生命周期内使用。以下是配置依赖注入的基本步骤:
喵叔
2024/05/24
8410
ASP.NET Core 应用程序Startup类介绍
Startup类配置服务和应用程序的请求管道。 Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup。在主程序的Web Host生成器(WebHostBuilderExtensions)的 UseStartup <TStartup> 扩展方法中指定启动类名称。 您可以为不同的环境定义不同的Startup类,并在运行时选择适当的Startup类。如果在Web Host配置或选项中指定startupAssembly(启动程序集),托管将加载该启动程序集并搜索 Star
晓晨
2018/06/22
9430
ASP.NET Core 2.0 WebAPI 跨域问题
关于 asp.net core 2.0 webapi的跨域,我们这里使用CORS来实现,不使用旧的JSONP,可以这样配置: 打开 Startup.cs文件,转到ConfigureServices(IServiceCollection services) 中,增加:
徐大嘴
2019/03/21
1.8K0
ASP.NET Core 2.0 WebAPI 跨域问题
揭秘 .Net Core 中的 IServiceProvider
.NET Core中的IServiceProvider接口是依赖注入(DI)系统的核心部分。它定义了一种检索服务对象的机制,这些服务对象是由依赖注入容器管理的类型的实例。理解IServiceProvider的工作原理以及如何有效地使用它,对于构建模块化且易于维护的应用程序至关重要。
郑子铭
2025/01/11
2310
揭秘 .Net Core 中的 IServiceProvider
Autofac入门与替代ASP.NET Core、ABP依赖注入容器
Autofac 官网文档地址: https://autofaccn.readthedocs.io/zh/latest/index.html
痴者工良
2021/04/26
1.9K0
.NET 高频面试题总结(高级开发、架构师)
支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
郑子铭
2024/04/15
1.2K0
.NET 高频面试题总结(高级开发、架构师)
ASP.NET Core 面试题(一)
首先添加 Session 包,其次在 ConfigService 方法中添加 Session,最后在 Configure 方法里调用 UseSession。
喵叔
2021/06/14
1.5K0
ASP.NET Core 面试题(一)
ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露
  在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore 这个项目中,我将使用 Jwt 的方式实现对于用户的权限管控,在本章中,我将演示如何使用 Jwt 实现对于用户的授权、鉴权。
程序员宇说
2019/09/11
2.5K0
ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露
Asp.Net Core使用SignalR进行服务间调用
网上查询过很多关于ASP.NET core使用SignalR的简单例子,但是大部分都是简易聊天功能,今天心血来潮就搞了个使用SignalR进行服务间调用的简单DEMO。
饭勺oO
2023/10/18
4770
Asp.Net Core使用SignalR进行服务间调用
【 .NET Core 3.0 】框架之二 || 后端项目搭建
至于为什么要搭建.Net Core 平台,这个网上的解释以及铺天盖地,想了想,还是感觉重要的一点,跨平台,嗯!没错,而且比.Net 更容易搭建,速度也更快,所有的包均由Nuget提供,不再像以前的单纯引入组件,
老张的哲学
2022/04/10
2.2K0
【 .NET Core 3.0 】框架之二 || 后端项目搭建
从壹开始前后端分离【 .NET Core2.2 +Vue2 】框架之十二 || 三种跨域方式比较
  今天忙着给小伙伴们提出的问题解答,时间上没把握好,都快下班了,赶紧发布:书说上文《从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1》,昨天咱们说到了分布式缓存键值数据库,主要讲解了如何安装,使用,最后遗留了一个问题,同步+Redis缓存还是比较简单,如何使用异步泛型存取Redis,还是一直我的心结,希望大家有会的,可以不吝赐教,本系列教程已经基本到了尾声,今天就说两个小的知识点,既然本系列是讲解前后端分离的,那一定会遇到跨域的问题,没错,今天将说下跨域!然后顺便说一下DTOs(数据传输对象),这些东西大家都用过,比如,在MVC中定义一个ViewModel,是基于Model实体类的,然后做了相应的变化,以适应前端需求,没错,就是这个,如果大型的实体类,一个个复杂的话会稍显费力,今天就是用一个自动映射工具——AutoMapper。
老张的哲学
2022/04/10
8050
从壹开始前后端分离【 .NET Core2.2 +Vue2 】框架之十二 || 三种跨域方式比较
【ASP.NET Core 基础知识】--Web API--创建和配置Web API(二)
集成Entity Framework Core(EF Core)是在ASP.NET Core Web API中进行数据库访问的常见方式。以下是集成EF Core的基本步骤:
喵叔
2024/05/24
6870
ASP.NET Core策略授权和 ABP 授权
Github 仓库源码地址 https://github.com/whuanles/2020-07-12
痴者工良
2021/04/26
2.4K0
net开发高级面试题2021_net面试题2021
dotnet 组织包含了.NET Core 的核心代码, 包括 coreclr 和 corefx 等.
全栈程序员站长
2022/09/27
3.5K0
net开发高级面试题2021_net面试题2021
快速展示原型之Minimal API开发
Minimal API官网地址: https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/minimal-apis/security?view=aspnetcore-7.0
明志德道
2023/10/21
5820
【ASP.NET Core 基础知识】--身份验证和授权--授权和策略
在ASP.NET Core中,授权和策略是重要的安全概念,用于确定用户是否有权限执行特定的操作或访问特定的资源。以下是关于ASP.NET Core中授权和策略的概念及其应用的一些重要信息:
喵叔
2024/05/24
4850
IdentityServer(13)- 添加JavaScript客户端
这个快速入门将展示如何构建一个JavaScript客户端应用程序。 用户将登录到IdentityServer,使用IdentityServer发出的访问令牌调用Web API,并注销IdentityS
晓晨
2018/06/22
2.8K0
ASP.NET Core应用基本编程模式[2]:依赖注入
基于IHostBuilder/IHost的服务承载系统建立在依赖注入框架之上,它在服务承载过程中依赖的服务(包括作为宿主的IHost对象)都由代表依赖注入容器的IServiceProvider对象提供。在定义承载服务时,也可以采用依赖注入方式来消费它所依赖的服务。作为依赖注入容器的IServiceProvider对象能否提供我们需要的服务实例,取决于相应的服务注册是否预先添加到依赖注入框架中。服务注册可以通过调用IHostBuilder接口或者IWebHostBuilder接口相应的方法来完成,前者在《服务承载系统》已经有详细介绍,下面介绍基于IWebHostBuilder接口的服务注册。[本文节选自《ASP.NET Core 3框架揭秘》第11章, 更多关于ASP.NET Core的文章请点这里]
蒋金楠
2020/11/13
1.1K0
ASP.NET Core应用基本编程模式[2]:依赖注入
登录注册的小项目对比.Net Core与 .Net Framework的一些区别
UserSys.IServices:主要有实体和对实体的配置,还有对实体的操作接口
张哥编程
2024/12/19
1070
登录注册的小项目对比.Net Core与 .Net Framework的一些区别
推荐阅读
相关推荐
C# .NET面试系列七:ASP.NET Core
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验