1、 Core 比 的优势在哪?
-
跨平台, Core 可以在 Windows、Linux 和 Mac 系统运行;
-
开源, Core 在 Github 上是开源的,意味着更安全以及更好的服务;
-
部署灵活, Core 运行时可以作为应用的一部分进行部署,也可以集中安装在Web 服务器上。另外,也适配 Docker 容器;
-
性能更强, Core 处理请求的性能更好,从而能处理更多的请求;
2、 Core 的特性有哪些?
-
支持依赖注入, Core 内置的依赖项注入;
-
内置日志框架,并且可以扩展;
-
可以通过命令来创建、运行应用程序;
-
对异步编程更好的支持;
-
引入新的、快速跨平台的 Web 服务器 — Kestrel;
-
支持 SignalR ;
-
可基于环境进行配置 ,
欢迎补充。
3、 Core Filter如何⽀持依赖注⼊?
-
全局注册
public void ConfigureServices(IServiceCollection services)
{
//全局注册异常过滤器
(option=> {
<ExecptionFilter>();
});
}
-
TypeFilter 方式注册
[TypeFilter(typeof(ExecptionFilter))]
public IActionFilter Index()
{
return View();
}
-
ServiceFilter 方式注册
使用 ServiceFilter 必须要注册Filter这类,可以标记在控制器和方法里
public void ConfigureServices(IServiceCollection services)
{
();
<ExecptionFilter>();
}
[ServiceFilter(typeof(ExecptionFilter))]
public IActionFilter Index()
{
return View();
}
4、 Core Filter 的注册方式有哪些?
方法注册:只对标记的方法有效
控制器注册:对控制器中的所有方法有效
全局注册:对整个项目生效
5、 Core 的 Startup 类是什么?
Startup 类是 Core 应用程序的入口, Core 应用不可以缺少,这个类主要用来配置应用程序。类名不一定叫 "Startup" 该类在 Program Main方法里进行调用。
Startup 类有两个方法
ConfigService 方法可以添加 Service 到依赖注入容器
Cofnigure 方法定义整个应用如何响应 HTTP 请求。可配置中间件,一些常用的中间件要熟悉和了解并配置。
6、ApplicationBuilder 的 Use 和 Run 方法有什么区别?
这两个都是向请求管道添加中间件,Use 会进入下一个中间件,Run 不会。Run 是终结点。
7、什么是中间件?
中间件指的是注入到应用中处理请求和响应的的组件。而这个过程我们称之为请求管道。
8、ApplicationBuilder Map 有什么用?
可以针对不同的路径添加不同的中间件。
9、 Core 工程文件有哪些?
launchSetting,appSettings,Program,Startup
10、 Core 中服务的生命周期有哪些?
-
Singleton 单例模式,只有一个服务实例被创建,这个实例存储在内存,可以在整个应用程序中使用。
<ITaskService, TaskService>();
-
Scoped 作用域,会在每个请求都创建一个服务的实例,请求的过程用的是同一实例。
<ITaskService, TaskService>();
-
Transient 瞬态,服务每次被调用的时候会创建一个服务实例,这种比较适合轻量级、无状态的服务。
<ITaskService, TaskService>();
11、中间件的应用场景有哪些?列举一些常用的中间件。
-
开发环境的异常处理:UseDeveloperExceptionPage();
-
⽣产环境的异常处理:UseExceptionHandler();
-
HTTP 严格传输安全协议:UseHsts();添加 Strict-Transport-Security 标头
-
HTTPS 重定向:UseHttpsRedirection();将 HTTP 重定向到 HTTPS
-
启用静态文件:UseStaticFiles();
-
启用 Cookie 策略:UseCookiePolicy();
-
路由请求:UseRouting();
-
身份验证:UseAuthentication(); 对用户进行身份验证,通过后才可心访问安全资源
-
授权:UseAuthorization(); 授权用户访问安全资源
-
会话中间件:UseSession();
-
终节点路由:UseEndpoints();
就列这些,注意它们的执行顺序。
12、 Core 项目如何设置 IP 地址和端口号?
打开 Properties 文件夹下的 launchSettings 文件进行配置。
13、什么是依赖注入?依赖注入的方式有哪些?什么是控制反转?依赖注入的原理?
Core 内置依赖注入,这方面的知识点也就成为一些面试官经常考查的点。通过这些考查反应面试者对依赖注入的理解。在公众号上我也写了一篇文章,希望有助于理解。
.Net Core上的依赖注入和控制反转
14、 Core 异常处理有哪些方案?
-
创建一个 YldController 继承 Controller,重写 OnActionExecuted。后面创建的 Controller 都继承 YldController
namespace
{
public class YldController : Controller
{
public override void OnActionExecuted(ActionExecutedContext context)
{
if ( != null)
{
//处理异常,记录异常信息等
}
(context);
}
}
//创建 HomeController ,继承 YldController
public class HomeController : YldController
{
public IActionResult Index()
{
return View();
}
}
}
-
继承 ActionFilterAttribute 类
public class ExceptionActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
if( != null)
{
//处理异常,记录异常信息等
}
(context);
}
public override void OnResultExecuted(ResultExecutedContext context)
{
if ( != null)
{
//处理异常,记录异常信息等
}
(context);
}
}
使用方式参考问题3
-
继承 IExceptionFilter 接口
public class YldExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
if( != null)
{
//省略...
}
}
}
-
使用 ExceptionHandler
public void Configure(IApplicationBuilder app,IHostEnvironment env)
{
if (())
{
();
}
else
{
("/Home/Error");
}
();
(endpoints =>
{
();
});
}
-
自定义中间件
public class ErrorMiddleware
{
private readonly RequestDelegate next;
public ErrorMiddleware(RequestDelegate next)
{
= next;
}
public async Task Invoke(HttpContext context)
{
try
{
await next(context);
}
catch (Exception ex)
{
//处理异常
}
}
}
public void Configure(IApplicationBuilder app,IHostEnvironment env)
{
//启用自定义中间件
(typeof(ErrorMiddleware));
();
(endpoints =>
{
();
});
}
15、 什么是 Core ?
Core 不是 的升级版本。 Core 完全重写了与 .NET Core 框架一起使用的功能。它更快、可配置、模块化、可扩展和跨平台支持。它可以通过 .NET 标准框架与 .NET Core 和 .NET 框架一起使用。
16、 Core 可以与 .NET 框架一起使用?
可以的。
17、 什么是请求委托?
请求委托处理每个 HTTP 请求并用于构建请求管道。它可以使用 Run、Map 和 Use 扩展方法进行配置。请求委托可以是内联匿名方法(称为内联中间件)或可重用类。这些类或内联方法称为中间件。
18、 Core 中的 Host是什么?
Host 封装了应用程序所有资源。启动时, Core 应用程序创建主机。主机封闭的资源包括:
-
HTTP 服务器的实现
-
依赖注入
-
配置
-
日志
-
中间件
19、介绍下缓存和响应缓存及内存缓存(MemoryCache)?
缓存通过减少对实际数据的调用次数,提高应用程序性能和扩展性。缓存制作数据副本并将其存储,而不是从原始源生成数据。
响应缓存最适合不经常更改的数据,响应缓存标头控制响应控制。ResponseCache 属性为这些缓存头设置额外的属性。
内存缓存是 Core 最简单的缓存方式,它将数据存储在 Web 服务器的内存中。内存缓存可以存储任何对象。
public void ConfigureServices(IServiceCollection services)
{
(); //启用内存缓存
}
如果有多台服务器时,需要分布式缓存,分布式缓存可以避免缓存一致性问题。它将内存卸载到外部进程。
分布式缓存优点:
-
跨客户端请求到多个服务器的数据是一致的;
-
服务重新启动和部署期间数据保持活动状态;
-
数据不是使用本地内存;
20、什么是XSRF 或 CSFR?如何防止 Core 中的跨站点请求伪造(XSRF/CSFR)攻击?
跨站点请求伪造 (也称为 XSRF 或 CSRF) 是对 web 托管应用程序的攻击,恶意 web 应用可能会影响客户端浏览器和信任该浏览器的 web 应用之间的交互。这些攻击是可能的,因为 web 浏览器会自动向网站发送每个请求的身份验证令牌。这种形式的攻击也称为 一键式攻击 或 会话 riding ,因为攻击利用用户以前的经过身份验证的会话。
Core 阻止跨站点请求伪造 (XSRF/CSRF) 攻击
过了年,马上就到金三银四了,有意跳槽的小伙伴们趁着过年这段时间好好准备吧。加油,骚年!
最后,祝大家学习愉快!