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