资源描述
1、什么是.NET Core,和.NET Framework 有什么区别?2、什么是依赖注入(DI)?为什么要使用依赖注入?3、如何在.NET Core 中创建一个 Web API?4、如何实现 Web API 路由?5、什么是 ASP.NET Core 的中间件?6、Web API 如何处理错误和异常?7、如何优化 Web API 性能?8、如何确保 Web API 的安全性?9、什么是 CORS,如何在 Web API 中配置 CORS?10、如何对.NET Core Web API 进行单元测试?11、ASP.NET Core 中AOP的支持有哪些?12、ASP.NET Core Filter的注册方式有哪些?13、ASP.NET Core Filter如何支持依赖注入?14、ASP.NET Core 如何和读取配置文件中的内容?15、ASP NET Core中如何处理异常(Exception)?16、说说Core WebApi的Swagger。17、ASP.NET Core中处理路由(Routing)?18、说说Core WebApi特性路由。19、说说RESTful是什么。20、说说脚本在请求Web CoreApi的时候,为什么会发生跨域问题?21、如何解决跨域问题?22、说说对http 301、302、303,304、400、405、415状态码的认识;23、REST和SOAP的区别是什么?24、设计WebAPI的最佳实践是什么?25、Applicationbuilder的Use和Run方法有什么区别?26、什么是meta packages?27、ASP.NET Core应用能够跟ASP.NET4.x架构一起工作吗?28、什么是ASP.NET Core的startup 类?29、startup 类的configservice方法有什么作用?30、startup 类的configure方法有什么作用?31、ASP.NET Core管道里面的map拓展有什么作用?32、ASP.NET Core里面的路径是如何处理的?33、ASP.NET Core工程里面有多少个工程文件?1、什么是.NET Core,和.NETFramework 有什么区别?回答:.NET Core 是一个开源的、跨平台的框架,适用于构建跨平台的应用程序,如 Web 应用、云服务、控制台应用等。与.NET Framework 相比,.NET Core 支持 Windows、Linux 和 macOS 操作系统,而.NET Framework 只支持 Windows。.NET Core 的另一个优势是它的模块化设计,应用程序只需引入所需的包,减少了应用的体积,并且支持更快的启动速度和更小的内存占用。2、什么是依赖注入(DI)?为什么要使用依赖注入?回答:依赖注入(DI)是一个设计模式,它通过将对象的依赖关系从对象内部解耦出来,使得系统的模块之间不再直接依赖,而是通过外部传入依赖。这样可以提高代码的可测试性和可维护性。在.NET Core 中,DI 是内置的,可以在 Startup.cs 中通过 ConfigureServices 方法注册服务和依赖。使用依赖注入的好处包括:提高模块间解耦度:服务之间不直接依赖,可以替换或修改服务而不影响其他部分。可测试性:方便进行单元测试和集成测试,因为依赖项可以通过构造函数注入。3、如何在.NET Core 中创建一个 WebAPI?回答:在.NET Core 中,创建 Web API 项目可以通过以下步骤:1、使用命令行创建项目:2、默认生成的 Startup.cs 中有配置服务和中间件的代码,包括:注册 AddControllers 服务,启用控制器支持。配置路由和中间件,如 app.UseRouting()和 app.UseEndpoints()。3、控制器类可以通过继承 ControllerBase 来创建 API。dotnet new webapi-n MyApiApiControllerRoute(api/controller)public class WeatherForecastController:ControllerBase4、如何实现 Web API 路由?回答:在.NET Core Web API 中,路由是由 Route 特性或 Map 方法定义的。路由可以是静态的或动态的,支持使用路径参数和查询参数。静态路由:如 Route(api/controller)。动态路由:例如,Route(api/controller/id),其中 id 是路径参数。private static readonly string Summaries=new Freezing,Bracing,Chilly,Cool,Mild,Warm,Hot,Sweltering ;HttpGet public IEnumerable 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=Summariesrng.Next(Summaries.Length).ToArray();还可以使用 HTTP 动作特性(如 HttpGet、HttpPost)来标识支持的 HTTP 请求方法。5、什么是 ASP.NET Core 的中间件?回答:中间件是 ASP.NET Core 应用程序中的一个组件,它可以在请求处理管道中处理请求和响应。每个中间件都可以决定是否继续处理请求或终止请求,并可以修改请求和响应。常见的中间件包括身份验证、授权、日志、错误处理、静态文件服务等。中间件在 Startup.cs 文件中的 Configure 方法中注册。例如:6、Web API 如何处理错误和异常?回答:在.NET Core 中,可以通过全局异常处理中间件或自定义异常过滤器来捕获和处理 Web API 中的错误和异常。public void Configure(IApplicationBuilder app,IHostingEnvironment env)app.UseRouting();app.UseAuthentication();app.UseAuthorization();app.UseEndpoints(endpoints=endpoints.MapControllers(););全局异常处理中间件:可以使用 UseExceptionHandler 中间件进行全局异常捕获,处理未捕获的异常并返回用户友好的错误信息。自定义异常过滤器:你也可以创建自定义的异常过滤器来处理特定的异常:app.UseExceptionHandler(/Home/Error);ApiControllerRoute(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);7、如何优化 Web API 性能?回答:常见的 Web API 性能优化方法包括:数据缓存:使用缓存(如 Redis、MemoryCache)缓存频繁请求的结果。减少不必要的数据加载:使用分页、筛选器和字段选择器来限制返回的数据量。并行处理:使用 async/await 异步编程来避免阻塞线程,提高并发处理能力。压缩响应数据:通过启用 Gzip 或 Brotli 压缩技术来减少网络传输的数据量。8、如何确保 Web API 的安全性?回答:Web API 安全性可以通过以下措施增强:1、身份验证和授权:使用 JWT(JSON Web Token)或 OAuth2 等机制来验证用户身份,确保只有授权用户能访问敏感资源。2、数据加密:使用 HTTPS 加密传输的数据,防止中间人攻击。3、输入验证:防止 SQL 注入、XSS(跨站脚本)等攻击,使用参数化查询和对用户输入进行严格验证。4、CORS(跨源资源共享):控制哪些域可以访问你的 API,防止恶意跨域请求。9、什么是 CORS,如何在 Web API 中配置 CORS?回答:CORS(Cross-Origin Resource Sharing)是允许浏览器向不同源的服务器发起请求的一种机制。它可以防止恶意的跨域请求。在.NET Core 中,可以通过在 Startup.cs 中配置 CORS:public void ConfigureServices(IServiceCollection services)services.AddCors(options=options.AddPolicy(AllowSpecificOrigin,builder=builder.WithOrigins().AllowAnyHeader().AllowAnyMethod(););public void Configure(IApplicationBuilder app)app.UseCors(AllowSpecificOrigin);10、如何对.NET Core Web API 进行单元测试?回答:.NET Core Web API 的单元测试通常使用 xUnit、NUnit 或 MSTest 进行。常见的测试策略包括:Mock 外部依赖:使用 Moq 等库模拟服务和依赖,避免直接依赖数据库或外部服务。编写控制器测试:测试 Web API 控制器的行为,包括 HTTP 状态码、返回值、异常处理等。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(result);Assert.Equal(200,okResult.StatusCode);11、ASP.NET Core 中AOP的支持有哪些?回答:通过Filter来支持;分别有IResourceFilter AuthorizeFilter ActionFilter ExceptionFilter ResultFilter,Filter也被称为拦截器!回答:12、ASP.NET Core Filter的注册方式有哪些?回答:方法注册:只对方法生效控制器注册:对控制器中的所有方法生效全局注册:对整个项目生效;13、ASP.NET Core Filter如何支持依赖注入?回答:可以通过全局注册,支持依赖注入通过TypeFilter(typeof(Filter)标记在方法,标记在控制器通过ServiceType(typeof(Filter)标记在方法,标记在控制器,必须要注册Filter这类;TypeFilter和ServiceType的本质是实现了一个IFilterFactory接口;14、ASP.NET Core 如何和读取配置文件中的内容?回答:可以有两种方式,可以通过IConfiguration接口来读取;有可以定义根据配置文件结构一致的实体对象,来绑定到对象中去;或者通过1写入,2注入读取必须保证:DBConnectionOption和配置文件的内容结构一致;1.services.Configure(Configuration.GetSection(ConnectionStrings);/注入多个链接 15、ASP NET Core中如何处理异常(Exception)?回答:我们可以使用try-catch块或全局异常过滤器来捕获和处理异常。在ASP.NET Core中,推荐使用中间件来处理异常,并返回适当的HTTP响应。16、说说Core WebApi的Swagger。回答:Swagger是一个Api说明文档,支持Api测试;现在CoreWebApi开发使用swagger还挺多的;在.NET5中已经内置了Core WebApi;配置流程如下:1.Nuget引入程序集:Swashbuckle.AspNetCore.SwaggerGen2.private DBConnectionOption dBConnections=null;private DbContext _Context=null;public DbContextFactory(DbContext context,IOptions options)_Context=context;dBConnections=options.Value;2.配置服务:3.配置使用中间件17、ASP.NET Core中处理路由(Routing)?回答:在ASP.NET Core中,路由由路由中间件处理。我们可以通过在Startup类的Configure方法中配置路由规则,或者使用特性路由来定义控制器和操作方法的路由。public void ConfigureServices(IServiceCollection services)services.AddControllers();services.AddSwaggerGen(c=c.SwaggerDoc(v1,new OpenApiInfo Title=WebApplication1,Version=v1););public void Configure(IApplicationBuilder app,IWebHostEnvironment env)app.UseSwagger();app.UseSwaggerUI(c=c.SwaggerEndpoint(/swagger/v1/swagger.json,WebApplication1 v1);18、说说Core WebApi特性路由。回答:在Core WebApi中,每一个Api必须指定特性路由,即在Api或者控制器上标记特性Route(api/Controller/Api);访问Api,就按照这个格式访问;19、说说RESTful是什么。回答:在传统的服务中,比方说WebService,WCF,Remouting,都是通过调用方法来做到一个进程去调用另外一个进程的服务,在Core WebApi中是把要调用的服务资源化,比方说有图书资源,Books,学生资源Studentlist,每一个资源对应一个控制器,然后对外提供增删改查等操作;对外提供统一的Uri,可以对资源Books,资源Studentlist做增删改查的操作;访问的是资源,可以根据不同的额访问方式,做不同的事儿;20、说说脚本在请求Web CoreApi的时候,为什么会发生跨域问题?回答:跨域问题:本质是浏览器的行为,浏览器有一个同源策略,同源策略:协议、IP地址相同就认为是同源;否则就非同源;同源策略限定脚本请求只能请求同源的服务器返回的内容才给正常的使用;否则就会报跨域问题;其实我们在请求Core WebApi的时候,浏览器直接访问Api没有问题,如果是脚本请求,就会出现跨域问题;21、如何解决跨域问题?回答:三种方式:1.后台模拟Http请求,既然是浏览器的行为,就避开浏览器,先来一个同源的服务器去请求,然后由服务器模拟http请求去请求到Core WebApi的资源,然后响应给前端;2.JSONP,思路:通过html部分标签发起请求,比方说 等等,发起请求是可以避开同源策略的,使用这些标签发起请求,然后带有一个回调函数,然后得到请求后,把回调函数之心一次,把数据解析后使用;3.服务端允许跨域,多种方式,可以自己定义中间件支持跨域,只要把响应的Response的头信息Header中写入“Access-Control-Allow-Origin”即可支持跨域;如果需要让所有的Api都支持跨域,就可以写一个中间件从管道处理模型中去支持跨域,如果要选择性的支持跨域,可以使用ActionFilter来完成,也可以通过Cors(ASP.NET Core中提供的中间件,可以支持配置不同的跨域规则)来配置支持跨域;22、说说对http 301、302、303,304、400、405、415状态码的认识;301表示永久重定向(301 moved permanently),表示请求的资源分配了新url,以后应使用新url。302表示临时性重定向(302 found),请求的资源临时分配了新url,本次请求暂且使用新url。302与301的区别是,302表示临时性重定向,重定向的url还有可能还会改变。303 表示请求的资源路径发生改变,使用GET方法请求新url。她与302的功能一样,但是明确指出使用GET方法请求新url。304 not modified客户端发送附带条件的请求时(if-matched,if-modified-since,if-none-match,if-range,if-unmodified-since任一个)服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304Modified(服务器端资源未改变,可直接使用客户端未过期的缓存)。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3xx类别中,但是和重定向没有关系。400 bad request表示请求的报文中存在语法错误,比如url含有非法字符。提交json时,如果json格式有问题,接收端接收json,也会出现400 bad request,比如常见的json串,数组不应该有,但是有了。405 method not allowed问题原因:请求的方式(get、post、delete)方法与后台规定的方式不符合。比如:后台方法规定的请求方式只接受get,如果用post请求,就会出现 405 method not allowed的提示415 后台程序不支持提交的content-type,就会返回415,spring mvc错误信息如下The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.unsupported media type23、REST和SOAP的区别是什么?答:REST(表述性状态转移)和SOAP(简单对象访问协议)是两种不同的Web服务设计方法。REST:轻量级,使用标准的HTTP方法。数据格式通常为JSON或XML。无状态且易于使用。可扩展并提供更好的性能。SOAP:更为严格和协议重。使用XML作为消息格式。可以通过各种传输协议操作,不仅限于HTTP。内置错误处理和安全功能。24、设计WebAPI的最佳实践是什么?答:设计WebAPI的最佳实践包括:使用RESTful原则:设计API以遵循REST指南。版本控制:在API中包含版本控制以管理更改而不破坏现有客户端。文档化:提供清晰和全面的API文档。错误处理:实现一致且有意义的错误消息。安全性:实施适当的身份验证、授权和输入验证。速率限制:通过限制客户端请求的数量防止滥用。性能优化:通过缓存、减少负载大小和优化数据库查询来优化API性能。25、Applicationbuilder的Use和Run方法有什么区别?回答:这两个方法都在startup 类的configure方法里面调用。都是用来向应用请求管道里面添加中间件的。Use方法可以调用下一个中间件的添加,而run不会。run是终结式的;26、什么是meta packages?回答:Meta packages是指包含所有ASP dot net code依赖的一个包。叫做Microsoft.AspNetCore27、ASP.NET Core应用能够跟ASP.NET4.x架构一起工作吗?回答:可以。ASP.NET Core应用可以跟标准的dot net 库一起工作。28、什么是ASP.NET Core的startup类?回答:startup 类是ASP.NET Core应用的入口。所有的ASP.NET Core应用必须有这个类。这个类用来配置应用。这个类的调用是在program main函数里面进行配置的。类的名字可以自己定义29、startup 类的configservice方法有什么作用?回答:用以配置应用的服务;在这个方法里我们可以添加一些service进入依赖注入容器。比如数据库连接池,mvc,swagger,controllers,filter,jwt,请求头,以及自己定义的接口。(服务是一个提供应用功能的可重用组件。在 ConfigureServices 中注册服务,并通过依赖关系注入(DI)或 ApplicationServices 在整个应用中使用服务。)最重要的参数为:IServiceCollection services30、startup 类的configure方法有什么作用?回答:用以创建应用的请求处理管道;这个方法来定义整个应用如何响应HTTP请求。它有几个比较重要的参数,IApplicationBuilder,Hosting environment,logfactory,在这里我们可以配置一些中间件用来处理路径,验证和session等等31、ASP.NET Core管道里面的map拓展有什么作用?回答:可以针对不同的路径添加不同的中间件。32、ASP.NET Core里面的路径是如何处理的?回答:路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。主要有两种路径处理方式,常规路径处理和属性路径处理。常规路径处理就是用MapRoute的方式设定 调用路径,属性路径处理是指在调用函数的上方设定一个路径属性。33、ASP.NET Core工程里面有多少个工程文件?回答:Program,Startup,launchsetting,appsettings
展开阅读全文