资源描述
1.NET Core笔试题 1.NET Core笔试题1.ASP.NET Core有哪些好的功能?2.什么是ASP.NET Core?3.说说什么是顶级语句?4.C#10 中struct有什么改进?5.如何理解C#10 中全局的using6.说说C#10中Lambda表达式的新特点。7.ASP.NET Core 中AOP的支持有哪些?8.ASP.NET Core Filter的注册方式有哪些?9.ASP.NET Core Filter如何支持依赖注入?10.ASP.NET Core 如何和读取配置文件中的内容?11.ASP NET Core中如何处理异常(Exception)?12.ASP.NET Core中如何进行身份验证(Authentication)和授权(Authorization)?13.ASP.NET Core中如何进行单元测试和集成测试?14.ASP.NET Core跟ASP.NET比较有哪些更好的地方?15.ASP.NET Core中如何进行缓存控制(Caching)?16.请描述一下ASP.NET Core中的WebSocket支持是如何实现的。17.ASP.NET Core中如何进行信号R(SignalR)开发?18.ASP.NET Core中如何进行API版本控制(API Versioning)?19.ASP.NET Core中如何处理异常(Exception)?20.ASP.NET Core中如何进行分布式缓存(Distributed Caching)?21.请解释一下ASP.NET Core中的Kestrel是什么以及它的作用。22.什么是Model-View-Controller(MVC)模式?ASP.NET Core中如何实现MVC?23.什么是meta packages?24.ASP.NET Core应用能够跟ASP.NET4.x架构一起工作吗?25.什么是ASP.NET Core的StartUp 类?26.StartUp 类的configservice方法有什么作用?27.StartUp 类的configure方法有什么作用?28.ASP.NET Core里面的路径是如何处理的?29.ASP.NET Core工程里面有多少个工程文件?30.什么是ASP.NET Core里面的taghelper31.说说.NET5中 _ViewImports文件的作用。32.什么是Razor页面?33.说说.NET5中 _ViewStart文件的作用34.如何在Razor页面中实现数据模型绑定?35.说说Record关键字的用法。36.说说在Linux系统部署ASP.NET Core项目的步骤。37.说说热重载是什么。38.说说对于泛型特性的理解。39.如何理解鉴权和授权两个词。40.说说.NET6包含了几大方向的开发?41.如何理解云原生?42.ASP.NET Core应用程序部署IIS,需要准备什么?43.如何理解MVC5的管道和ASP.NET Core的管道?44.在ASP.NET Core设计中,为什么要把把ResourceFilter放在授权Filter之后,而在其他Filter之前。45.说说优化Core WebApi性能的常见方案46.如何理解MAUI?47.如何在ASP.NET Core中激活Session功能?48.什么是中间件?49.Applicationbuilder的Use和Run方法有什么区别?50.如何使taghelper在元素这一层上失效?51.如何在Controller中注入service?52.描述一下依赖注入后的服务生命周期?53.说说ASP.NET Core内置容器的特点;54.ASP.NET Core中如何读取静态文件?55.ASP.NET Core项目如何设置IP地址和端口号?56.ASP.NET Core项目中,wwwroot文件夹内包含什么内容?57.NET6 中中间件的底层实现和.NET5中间件的区别。58.谈谈对ASP.NET Core kestrel的理解。59.谈谈对Autofac的理解;60.ASP.NET Core 如何支持Log4Net扩展?61.说说脚本启动ASP.NET Core Web项目62.说说Core WebApi的Swagger。63.ASP.NET Core中处理路由(Routing)?64.说说Core WebApi特性路由。65.说说RESTful是什么。66.说说脚本在请求Web CoreApi的时候,为什么会发生跨域问题?67.如何解决跨域问题?68.说说你了解到的鉴权授权技术。69.请问对gRPC有了解吗,说说gRPC。70.gRPC有几种模式?71.说说如何使用C#实现简单模式gRPC72.说说gRPC的拦截器有哪些?73.gPRC作为一种被调用的服务,有什么保护安全的措施吗?74.NET Core中,WebAPI和MinimalAPI有什么区别?75.开发一个.NET Core Web应用时,我们可以通过静态文件中间件将静态资源存放在站点目录中,然后通过http路径进行访问,那么存放在站点目录有什么问题,有哪些需要考虑的?76.什么是负载均衡,以及如何做负载均衡?77.网页开发中,一般都是前端主动发起请求,通过后端获取最新数据,如果需要实现实时展示最新数据的功能,比如智慧大屏的动态效果,如何实现?78.说说你知道的ORM框架。79.请问对EFCore有了解吗?80.说说EFCore查询的性能调优小技巧。81.EFCore 如果通过数据生成实体和DbContext?82.说说对SaveChanges的理解。83.说说对EFCore中EntityState的理解。84.说说什么是导航属性和引用属性。85.ASP.NET Core管道里面的map拓展有什么作用?86.EFCore有几种配置映射方式?87.NET中,如果需要在指定的时间或者某个周期内,执行一个操作,比如清空某个日志表,有哪些方式?1.ASP.NET Core有哪些好的功能?第一是依赖注入。第二是日志系统架构。第三是引入了一个跨平台的网络服务器,kestrel。可以没有iis,apache和nginx就可以单独运行。第四是可以使用命令行创建应用。第五是使用appsettings来配置工程。第六是使用StartUp来注册服务。第七是更好的支持异步编程。第八是支持web socket和signal IR。第九是对于跨网站的请求的预防和保护机制。2.什么是ASP.NET Core?首先ASP.NET Core可以说是 ASP.NET的升级版本。它遵循了.NET的标准架构,是一个基于.NET Core的Web开发框架,可以运行于多个操作系统上。它更快,更容易配置,更加模块化,可扩展性更强。3.说说什么是顶级语句?顶级语句(Top-level Statements)是C#9.0引入的一项功能,它允许开发者在C#程序中直接编写执行代码,而不需要显式地包裹在类、方法或其他结构中。顶级语句的目标是简化小型应用程序、脚本和快速原型开发的过程。在传统的C#应用程序中,所有的代码都必须放在类的内部,然后通过Main方法作为程序的入口点。而使用顶级语句,你可以在C#文件的顶部直接编写执行代码,而无需显式定义类或方法。4.C#10 中struct有什么改进?主要在于支持了无参数构造函数的改进,在C#10之前,约束了不能有无参数的构造函数,现在在C#10 方法了这一约束;public struct Teaach public Teaach(string firstName,string lastName)this.FirstName=firstName;this.LastName=lastName;public string FirstName get;set;public string LastName get;set;5.如何理解C#10 中全局的using using 指令简化了您使用命名空间的方式。C#10 包括一个新的全局 using 指令和隐式 usings,以减少您需要在每个文件顶部指定的 usings 数量。全局 using 指令:如果关键字 global 出现在 using 指令之前,则 using 适用于整个项目。隐式 usings:隐式 usings 功能会自动为您正在构建的项目类型添加通用的全局 using 指令。要启用隐式 usings,请在.csproj 文件中设置 ImplicitUsings 属性6.说说C#10中Lambda表达式的新特点。在之前的版本中我们是需要显式声明委托类型,如上述被注释的代码,在 C#10 就可以直接使用 var 来声明由编译器去推断委托的类型/Func func=()=1;var func=()=1;/Func func2=()=Hello;var func2=()=Hello;我们可以在指定输入参数类型的时候,可以设置 ref/out/int 来表示一个值类型的引用传递,示例如下:C#10 的委托可以指定返回类型,如下:对于能够推断出类型的方法,我们也可以使用 var 来声明委托,示例如下var refFunc=(ref int x)=x+;var outFunc=(out int x)=x=-1;var inFunc=(in int x)=;var num=1;refFunc(ref num);Console.WriteLine(num);outFunc(out num);Console.WriteLine(num);/return typevar lambdaWithReturnValue0=int?()=null;/return type and input typevar lambdaWithReturnValue1=int?(string s)=string.IsNullOrEmpty(s)?1:null;/Funcvar choose=object(bool b)=b?1:two;对于能够推断出类型的方法,我们也可以使用 var 来声明委托,示例如下:7.ASP.NET Core 中AOP的支持有哪些?/Action func3=LocalMethod;var func3=LocalMethod;void LocalMethod(string a)Console.WriteLine(a);var checkFunc=string.IsNullOrEmpty;var read=Console.Read;Action write=Console.Write;/Action func3=LocalMethod;var func3=LocalMethod;void LocalMethod(string a)Console.WriteLine(a);var checkFunc=string.IsNullOrEmpty;var read=Console.Read;Action write=Console.Write;通过Filter来支持;分别有IResourceFilter AuthorizeFilter ActionFilter ExceptionFilter ResultFilter,Filter也被称为拦截器!8.ASP.NET Core Filter的注册方式有哪些?方法注册:只对方法生效控制器注册:对控制器中的所有方法生效全局注册:对整个项目生效;9.ASP.NET Core Filter如何支持依赖注入?可以通过全局注册,支持依赖注入通过TypeFilter(typeof(Filter)标记在方法,标记在控制器通过ServiceType(typeof(Filter)标记在方法,标记在控制器,必须要注册Filter这类;TypeFilter和ServiceType的本质是实现了一个IFilterFactory接口;10.ASP.NET Core 如何和读取配置文件中的内容?可以有两种方式,可以通过IConfiguration接口来读取;有可以定义根据配置文件结构一致的实体对象,来绑定到对象中去;或者通过1写入,2注入读取必须保证:DBConnectionOption和配置文件的内容结构一致;11.ASP NET Core中如何处理异常(Exception)?我们可以使用try-catch块或全局异常过滤器来捕获和处理异常。在ASP.NET Core中,推荐使用中间件来处理异常,并返回适当的HTTP响应。1.services.Configure(Configuration.GetSection(ConnectionStrings);/注入多个链接 2.private DBConnectionOption dBConnections=null;private DbContext _Context=null;public DbContextFactory(DbContext context,IOptions options)_Context=context;dBConnections=options.Value;12.ASP.NET Core中如何进行身份验证(Authentication)和授权(Authorization)?ASP.NET Core提供了身份验证和授权的中间件,可以通过配置身份提供程序、声明策略和角色来实现用户身份验证和授权控制。13.ASP.NET Core中如何进行单元测试和集成测试?我们可以使用xUnit、NUnit等单元测试框架来编写和运行单元测试,以验证应用程序的单个部分。对于集成测试,可以使用Selenium等工具模拟用户操作并测试整个应用程序。14.ASP.NET Core跟ASP.NET比较有哪些更好的地方?第一是跨平台,它可以运行在三大操作系统上面,windows,Linux和MAC。第二是对架构本身安装没有依赖,因为所有的依赖都跟程序本身在一起。第三是ASP.NET Core处理请求的效率更高,能够处理更多的请求。第四是ASP.NET Core有更多的安装配置方法。15.ASP.NET Core中如何进行缓存控制(Caching)?ASP.NET Core提供了内置的缓存支持,包括内存缓存、分布式缓存等。我们可以在控制器或视图中使用缓存特性来控制缓存的行为和过期时间。16.请描述一下ASP.NET Core中的WebSocket支持是如何实现的。ASP.NET Core提供了WebSocket中间件,可以通过在Startup类的Configure方法中启用WebSocket中间件,并编写处理WebSocket连接的代码来实现实时通信功能。17.ASP.NET Core中如何进行信号R(SignalR)开发?SignalR是ASP.NET Core中实现实时通信的库,可以通过在Startup类的ConfigureServices方法中配置SignalR服务,然后在控制器或Hub类中编写实时通信的逻辑。18.ASP.NET Core中如何进行API版本控制(API Versioning)?我们可以使用Microsoft.AspNetCore.Mvc.Versioning包来实现API版本控制。通过配置版本路由、查询字符串参数等方式,来管理不同版本的API。19.ASP.NET Core中如何处理异常(Exception)?我们可以使用try-catch块或全局异常过滤器来捕获和处理异常。在ASP.NET Core中,推荐使用中间件来处理异常,并返回适当的HTTP响应。20.ASP.NET Core中如何进行分布式缓存(Distributed Caching)?ASP.NET Core提供了分布式缓存支持,可以使用分布式缓存提供程序,如Redis、SQL Server等,在多个节点之间共享缓存数据。我们可以在控制器或视图中使用缓存特性来控制缓存的行为和过期时间。21.请解释一下ASP.NET Core中的Kestrel是什么以及它的作用。答案:Kestrel是ASP.NET Core的内置Web服务器,用于处理和响应HTTP请求。它具有高性能、轻量级、跨平台等特点,可以作为单独的Web服务器或与其他Web服务器一起使用。22.什么是Model-View-Controller(MVC)模式?ASP.NETCore中如何实现MVC?答案:MVC是一种设计模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)。在ASP.NET Core中,我们可以创建控制器来处理用户请求,与模型交互,并返回视图。23.什么是meta packages?Meta packages是指包含所有ASP dot net code依赖的一个包。叫做Microsoft.AspNetCore24.ASP.NET Core应用能够跟ASP.NET4.x架构一起工作吗?可以。ASP.NET Core应用可以跟标准的dot net 库一起工作。25.什么是ASP.NET Core的StartUp类?StartUp 类是ASP.NET Core应用的入口。所有的ASP.NET Core应用必须有这个类。这个类用来配置应用。这个类的调用是在program main函数里面进行配置的。类的名字可以自己定义。26.StartUp 类的configservice方法有什么作用?在这个方法里我们可以添加一些service进入依赖注入容器。27.StartUp 类的configure方法有什么作用?这个方法来定义整个应用如何响应HTTP请求。它有几个比较重要的参数,applicationbuilder,Hosting environment,logfactory,在这里我们可以配置一些中间件用来处理路径,验证和session等等。28.ASP.NET Core里面的路径是如何处理的?路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。主要有两种路径处理方式,常规路径处理和属性路径处理。常规路径处理就是用MapRoute的方式设定调用路径,属性路径处理是指在调用函数的上方设定一个路径属性。29.ASP.NET Core工程里面有多少个工程文件?launchsetting,appsettings,Program,StartUp 30.什么是ASP.NET Core里面的taghelper Taghelper用来在服务器端使用Razor视图引擎创建html元素的。31.说说.NET5中 _ViewImports文件的作用。在.NET5中可以支持组件化编程,定义的各种组件,在项目中使用的时候,需要在_ViewImports文件中引入进来。32.什么是Razor页面?是ASP.NET Core中支持ASP网页表格的一种开发模型。page 作为页面的起始标志。Stringbulider的使用,最好制定合适的容量值,否则优于默认值容量不足而频繁的进行内存分33.说说.NET5中 _ViewStart文件的作用 在控制器在返回视图的时候,开始替换视图引擎的时候,从_ViewStart.cshtml 开始,来初始化展示的视图界面;34.如何在Razor页面中实现数据模型绑定?使用bindproperty属性。35.说说Record关键字的用法。可以用来简单声明一个类:这里的示例,用 record 声明了两个 实体,第二个 实体 声明的时候使用了简化的写法,record People2(string Name,int Age);这样的声明意味着,构造方法有两个参数,分别是 string Name 和 int Age,并对应着两个属性,属性的声明方式和 People 一样 public string Name get;init;都是一个 get 一个 init,对于 record 支持一个 with 表达式,来修改某几个属性的值,这对于有很多属性都相同的场景来说是及其方便的;36.说说在Linux系统部署ASP.NET Core项目的步骤。a.准备Linux系统b.安装ASP.NET Core 的运行时环境(类似于人类生存需要空气和水,那么ASP.NET Core程序运行也需要符合它运行的的环境)c.发布ASP.NET Core 项目(可以直接发布到Linux上去,也可以发布成文件系统,然后上传)d.上传到Linux系统record People public string Name get;init;public int Age get;init;上面是声明一个类下面的声明也是声明一个类,和上面的一样;不需要使用大括号来执行属性;record People2(string Name,int Age);e.进入到发布程序的根目录,执行命令:37.说说热重载是什么。热重载由“编辑并继续”,在不需要停止在代码断点或者重启应用程序的情况下,就可以对代码进行修改,并可以立即看到代码修改的效果。修改代码后,点击Vs 上的红色火苗按钮即可。现在我们可以在 Lambda 表达式中指定 Attribute38.说说对于泛型特性的理解。泛型:不确定的类型,声明时不确定类型,调用时确定类型。可以支持一个类、方法、委托、接口等 类支持不同类型的需求;那么对于泛型的支持;C#10 推广了特性,使得特性可以用泛型,如下例:dotnet run -urls=Linux系统的Ip:端口号 var parse3=Description(Lambda attribute)(string s)=int.Parse(s);var choose3=Description(Lambda attribute1)object(bool b)=b?1:two;在使用的时候:39.如何理解鉴权和授权两个词。鉴权:确定来来访者是谁,解析来访者携带的信息,记录来访这的信息;授权:鉴权以后,通过来访者的信息内容来分辨是否允许本次返回本次要访问的资源;40.说说.NET6包含了几大方向的开发?共8大方向:WEB:网站开发Mobile:手机端开发Desktop:桌面开发Microservices:微服务Cloud:云原生开发public sealed class SomeAttribute:Attribute SomeAttributeclass A SomeAttributeclass B Machin Learning:人工智能Game Development:游戏开发Internet of Things:物联网开发41.如何理解云原生?云原生最大的价值和愿景,就是认为未来的软件,会从诞生起就生长在云服务器上,并且遵循一种新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。第一部分是云应用定义与开发流程。这包括应用定义与镜像制作、配置 CI/CD、消息和 Streaming 以及数据库等。第二部分是云应用的编排与管理流程。这也是 Kubernetes 比较关注的一部分,包括了应用编排与调度、服务发现治理、远程调用、API 网关以及 Service Mesh。第三部分是监控与可观测性。这部分所强调的是云上应用如何进行监控、日志收集、Tracing 以及在云上如何实现破坏性测试,也就是混沌工程的概念。第四部分就是云原生的底层技术,比如容器运行时、云原生存储技术、云原生网络技术等。第五部分是云原生工具集,在前面的这些核心技术点之上,还有很多配套的生态或者周边的工具需要使用,比如流程自动化与配置管理、容器镜像仓库、云原生安全技术以及云端密码管理等。最后则是 Serverless。Serverless 是一种 PaaS 的特殊形态,它定义了一种更为“极端抽象”的应用编写方式,包含了 FaaS 和 BaaS 这样的概念。而无论是 FaaS 还是 BaaS,其最为典型的特点就是按实际使用计费(Pay as you go),因此 Serverless 计费也是重要的知识和概念。42.ASP.NET Core应用程序部署IIS,需要准备什么?需要安装AspNetCoreMoudleV243.如何理解MVC5的管道和ASP.NETCore的管道?在.NET Framework中MVC的管道是通过事件驱动,观察者模式来完成。在HttpContext处理的过程中,定义好事件,然后通过给事件注册行为;请求来了以后,执行事件,从而执行行为,达到扩展目的;在ASP.NET Core中,管道是通过委托来完成的,通过委托的多层嵌套装配,形成一个俄罗斯套娃;请求来了以后,穿过整个俄罗斯套娃的全部过程;44.在ASP.NET Core设计中,为什么要把把ResourceFilter放在授权Filter之后,而在其他Filter之前。ResourceFilter是用来做缓存的,请求来了以后,如果能取出缓存,也必须是在授权桌,有权限才能取数据;也是ResourceFilter是用来做缓存的,如果有缓存,授权后就可以直接取缓存,就没有必要再去执行其他的逻辑;如果放在其他Filter之后,在执行了其他的Filter后取缓存,那么其他的Filter执行就没有价值了。45.说说优化Core WebApi性能的常见方案 缓存压缩46.如何理解MAUI?.NET 多平台应用 UI(.NET MAUI)是一个跨平台框架,用于创建使用 C#和 XAML 的本机移动和桌面应用。.NET多平台应用 UI(.NETMAUI)使你可以使用面向 Android、iOS、macOS、Windows 和 Tizen 的移动和桌面外形规格的.net 跨平台 ui 工具包生成本机应用47.如何在ASP.NET Core中激活Session功能?首先要添加session包.其次要在configservice方法里面添加session。然后又在configure方法里面调用usesession。48.什么是中间件?中间件在这里是指注入到应用中处理请求和响应的组件。是通过多个委托来嵌套形成的一个俄罗斯套娃!49.Applicationbuilder的Use和Run方法有什么区别?这两个方法都在StartUp 类的configure方法里面调用。都是用来向应用请求管道里面添加中间件的。Use方法可以调用下一个中间件的添加,而run不会。run是终结式的;50.如何使taghelper在元素这一层上失效?使用叹号。51.如何在Controller中注入service?在config services方法中配置这个service。在controller的构造函数中,添加这个依赖注入。52.描述一下依赖注入后的服务生命周期?在ASP.NET Core中,我们不需要关心如何释放这些服务,因为系统会帮我们释放掉。有三种服务的生命周期。单实例服务,通过add singleton方法来添加。在注册时即创建服务,在随后的请求中都使用这一个服务。短暂服务,通过add transient方法来添加。是一种轻量级的服务,用于无状态服务的操作。作用域服务,一个新的请求会创建一个服务实例。使用add scoped方法来添加。53.说说ASP.NET Core内置容器的特点;ASP.NET Core内置容器IServiceCollection,只支持构造函数注入;支持三种声明周期:单例、瞬时、Scoped三种声明周期管理;54.ASP.NET Core中如何读取静态文件?可以通过中间件UseStaticFiles来配置读取静态文件;55.ASP.NET Core项目如何设置IP地址和端口号?可以使用Properties文件夹下的launchSettings配置文件来配置不同的启动方式的时候,分别配置IP和端口号。56.ASP.NET Core项目中,wwwroot文件夹内包含什么内容?包含了css、js、js库、字体文件57.NET6 中中间件的底层实现和.NET5中间件的区别。从底层实现没有太大的区别,都是委托的多层嵌套,实现中间件的组装,在.NET6中提供了更多的重载可以来调用;都是基于底层还是转换成委托的多层嵌套式。58.谈谈对ASP.NET Core kestrel的理解。Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器。Kestrel 是 Web 服务器,默认包括在 ASP.NET Core 项目模板中。Kestrel 支持以下方案:HTTPS28用于启用 WebSocket 的不透明升级用于获得 Nginx 高性能的 Unix 套接字HTTP/2(除 macOS 以外)macOS 的未来版本将支持 HTTP/2。.NET Core 支持的所有平台和版本均支持 Kestrel。59.谈谈对Autofac的理解;Autofac是一个IOC容器,支持三种类型的DI依赖注入,配置文件配置映射关系,支持AOP扩展定制;在ASP.NET Core的使用步骤如下:1.Nuget引入Autofac程序集2.在Program类中的CreateHostBuilder方法中,通过.UseServiceProviderFactory(new AutofacServiceProviderFactory()替换容器工厂,把容器替换到框架中;3.在StartUp中增加ConfigureContainer方法,用来配置映射关系4.就可以在控制器中配置构造函数注入了60.ASP.NET Core 如何支持Log4Net扩展?就是一个日志组件的集成使用,大概分为以下步骤:1.nuget引入log4net程序集;Microsoft.Extensions.Logging.Log4Net.AspNetCore程序集合2.增加配置文件,配置文件内容如下public void ConfigureContainer(ContainerBuilder builder)使用了Autofac以后,在IServiceCollection中注入的服务,也能生效;因为Autofac是先接受了所有的来自于IServiceCollection的服务映射后,再去读取ConfigureContainer方法中配置的映射;3.使用Log4net配置 4.就可以支持注入了,可以在控制器中使用了61.说说脚本启动ASP.NET Core Web项目 介绍两种方式:第一种:定位到Web项目的编译地址下,就是bin文件夹下的.NET5文件夹,然后在当前文件夹下打开命令提示窗口;dotnet dll文件 -urls=ip地址:端口号 回车即可;public static IHostBuilder CreateHostBuilder(string args)return Host.CreateDefaultBuilder(args)/创建默认主机的建造者;.ConfigureLogging(loggbuild=loggbuild=loggbuild.AddLog4Net(CfgFile/log4net.Config);)/配置logging(指定使用Log4net).ConfigureWebHostDefaults(webBuilder=webBuilder.UseStartUp();/如何配置?配置全交给StartUp来完成;).UseServiceProviderFactory(new AutofacServiceProviderFactory();第二种:定位到Web项目的根目录下,然后在当前文件夹下打开命令提示窗口;dotnet run -urls=ip地址:端口号 回车即可;推按第二种,第二种方式,在启动的时候,会自动编译项目,然后启动dll文件;62.说说Core WebApi的Swagger。Swagger是一个Api说明文档,支持Api测试;现在CoreWebApi开发使用swagger还挺多的;在.NET5中已经内置了Core WebApi;配置流程如下:1.Nuget引入程序集:Swashbuckle.AspNetCore.SwaggerGen2.配置服务:3.配置使用中间件public void ConfigureServices(IServiceCollection services)services.AddControllers();services.AddSwaggerGen(c=c.SwaggerDoc(v1,new OpenApiInfo Title=WebApplication1,Version=v1););63.ASP.NET Core中处理路由(Routing)?在ASP.NET Core中,路由由路由中间件处理。我们可以通过在Startup类的Configure方法中配置路由规则,或者使用特性路由来定义控制器和操作方法的路由。64.说说Core WebApi特性路由。在Core WebApi中,每一个Api必须指定特性路由,即在Api或者控制器上标记特性Route(api/Controller/Api);访问Api,就按照这个格式访问;65.说说RESTful是什么。在传统的服务中,比方说WebService,WCF,Remouting,都是通过调用方法来做到一个进程去调用另外一个进程的服务,在Core WebApi中是把要调用的服务资源化,比方说有图书资源,Books,学生资源Studentlist,每一个资源对应一个控制器,然后对外提供增删改查等操作;对外提供统一的Uri,可以对资源Books,资源Studentlist做增删改查的操作;public void Configure(IApplicationBuilder app,IWebHostEnvironment env)app.UseSwagger();app.UseSwaggerUI(c=c.SwaggerEndpoint(/swagger/v1/swagger.json,WebApplication1 v1);访问的是资源,可以根据不同的额访问方式,做不同的事儿;66.说说脚本在请求Web CoreApi的时候,为什么会发生跨域问题?跨域问题:本质是浏览器的行为,浏览器有一个同源策略,同源策略:协议、IP地址相同就认为是同源;否则就非同源;同源策略限定脚本请求只能请求同源的服务器返回的内容才给正常的使用;否则就会报跨域问题;其实我们在请求Core WebApi的时候,浏览器直接访问Api没有问题,如果是脚本请求,就会出现跨域问题;67.如何解决跨域问题?三种方式:1.后台模拟Http请求,既然是浏览器的行为,就避开浏览器,先来一个同源的服务器去请求,然后由服务器模拟http请求去请求到Core WebApi的资源,然后响应给前端;2.JSONP,思路:通过html部分标签发起请求,比方说 等等,发起请求是可以避开同源策略的,使用这些标签发起请求,然后带有一个回调函数,然后得到请求后,把回调函数之心一次,把数据解析后使用;3.服务端允许跨域,多种方式,可以自己定义中间件支持跨域,只要把响应的Response的头信息Header中写入“Access-Control-Allow-Origin”即可支持跨域;如果需要让所有的Api都支持跨域,就可以写一个中间件从管道处理模型中去支持跨域,如果要选择性的支持跨域,可以使用ActionFilter来完成,也可以通过Cors(ASP.NET Core中提供的中间件,可以支持配置不同的跨域规则)来配置支持跨域;68.说说你了解到的鉴权授权技术。1.传统的授权技术:通过Session、Cookie完成授权;实现特点:让无状态的http请求,变的有状态,让第一次请求和第二次请求之间产生联系,第一次请求进入服务器,在服务器写入一组session,然后返回sessionId给客户端存在Cookie,第二次请求,从cookie中渠道SessionId,传递给服务器,服务器鉴别SessionId,如果是上一次来的SessionId,就认为之前来请求过;就认为有权限;2.流行鉴权授权方式:Token授权,在Core WebApi中主要就是JWT和Identit
展开阅读全文