跨平台,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) 攻击
过了年,马上就到金三银四了,有意跳槽的小伙伴们趁着过年这段时间好好准备吧。加油,骚年!
最后,祝大家学习愉快!
文章浏览阅读1k次。findfirst搜索匹配字符串的第一个文件。findfirst <dir handle> <file name> <strvar>注释findfirst命令搜索与指定文件名<file name>匹配的第一个文件。如果找到该文件,则此命令返回的目录句柄保存在<dir handle>中,返回的第一个文件名保存在<..._ttl脚本 find
文章浏览阅读940次。关于如何用R语言绘制生存曲线的问题已经有太多大佬说过了,我也来凑个热闹以下是视频如何用R语言绘制生存曲线_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com这次就不详细解释了,直接放代码了rm(list=ls())library(openxlsx)library(survival)library(ggplot2)library(ggpubr)librar..._ggplot2怎么画生存曲线
文章浏览阅读441次。正则化正则化是指在损失函数后面添加一个范数,以此防止模型过拟合的方式。范数定义:∣∣x∣∣p=(∑i=1n∣x∣p)1p||x||_p = (\sum_{i=1}^{n}|x|^p)^\frac{1}{p}∣∣x∣∣p=(i=1∑n∣x∣p)p11)p = 1时,即L1范数:∣∣x∣∣p=(∑i=1n∣x∣)||x||_p = (\sum_{i=1}^{n}|x|)∣∣x∣∣p=(i=1∑n∣x∣)2)p = 2时,即L2范数:∣∣x∣∣p=(∑i=1n∣x∣2)12||_岭回归的损失函数
文章浏览阅读1.1w次,点赞25次,收藏135次。目录:总体介绍1.步进电机简介1)什么是步进电机[^脚注]?2)为什么需要驱动电路去驱动步进电机,而不用IO口直接驱动?3)步进电机的几个概念:2.基础硬件测试驱动1)整体原理图2)PCB电路3)3D_PCB2.STM32控制驱动程序设计1)端口定义与函数声明2)步进电机驱动函数3)按键简单调用转动步进电机【正反转】3.效果展示1).调试图连接图注:本文仅用于学习交流分享,[若有不妥之处,请指正..._程序控制镜头对焦
文章浏览阅读7.8k次,点赞3次,收藏10次。Android如何实现获取手机CPU的温度?在做项目过程中,有时需要获取手机CPU的温度。目前市面上常见的CPU主要有两种:MTK(联发科)、Qualcomm(高通)。当然还有我们华为的海思麒麟CPU,以及三星的CPU。后两种CPU在本篇文章中就不做展开,有兴趣的同学,可以自行去研究研究。通过研究发现,CPU的信息基本都是在/sys/class/thermal/目录下,通过adb shell...
文章浏览阅读850次。Cppcheck是一个用于C/C++代码的静态分析工具,它可以帮助开发者检测代码中的错误;Cppcheck可以检测出许多类型的错误,包括语法错误、未使用的函数、内存泄漏、未初始化的变量等;Cppcheck还支持用户自定义规则,这使得开发者可以根据自己的需求定制Cppcheck的行为;使用--suppress如果你想要忽略某些警告,可以在命令行中使用 --suppress 选项。_cppcheck自定义规则
文章浏览阅读9.4k次,点赞2次,收藏16次。所谓模态窗口(modal window),又叫做模式窗口,一般是指应用程序中那些任务比较紧要的窗口。只要它们存在,它们便会阻止用户访问其他窗口(或者是阻止用户访问其祖先窗口)。在windows中,使用DialogBoxParam显示的对话框就是模态的。虽然模态对话框在windows中很普遍,但是并没有SDK级别的API,可以将一个窗口变为模态显示。不过在同为微软提供的MFC/WTL框架中有这样的A_c++ 通过hwnd 设置为模态框
文章浏览阅读6.8w次。Error:java: Compilation failed: internal java compiler error是编译器在编译Java代码时遇到的内部错误。_java: compilation failed: internal java compiler error
文章浏览阅读1.6k次。问题 C: 母鸡下蛋鸡国中的母鸡最擅长下蛋了,MGMG 是鸡国中一只以下蛋产量高而闻名全鸡国的母鸡。 鸡国专供下蛋的 n 个鸡窝呈一字排列在鸡国的“下蛋中心”,从左到右依次编号为 1 到n。每个鸡窝都有一个最大可下蛋的量,其中第 i 个鸡窝的最大可下蛋量为 ci 。有时候由于MGMG 产量实在太大而无法在一个鸡窝中下完所有的蛋,不得不转移到隔壁的鸡窝继续下蛋,如果隔壁的鸡窝还是不能让它_问题 c: 母鸡下蛋
文章浏览阅读873次,点赞15次,收藏18次。通过咖啡在线销售这个平台,可以使用户足不出户就可以了解现今的咖啡信息,为用户提供了极大的方便,咖啡在线销售的主要功能包含:店铺信息管理、注册用户管理、商品信息管理等模块。前台子系统为用户提供注册、登陆的功能,以及浏览咖啡,购买咖啡,提交订单后采用模拟的金额支付,实现咖啡的购买流程。后台子系统供网站内部管理人员使用,可以咖啡修改和删除、注册用户管理、店铺信息管理等功能,对用户的订单进行管理。另外一部分是网站的后台管理部分,这部分包括:对普通用户的账号进行删除、更改、查询管理,咖啡的管理、订单的管理等。_vue node商城
文章浏览阅读1.2w次,点赞4次,收藏82次。Lingo与最短路问题 代码如下:!最短路问题;model:data: n=10;enddatasets: cities/1..n/: F; !10个城市; roads(cities,cities)/ 1,2 1,3 2,4 2,5 2,6 3,4 3,5 3,6 4,7 4,8 5,7 5,8 5..._lingo最短路问题
文章浏览阅读6k次,点赞7次,收藏66次。多进程通信_c++进程间通信