nopCommerce 3.9 大波浪系列 之 global.asax

一.nop的global.asax文件

nop3.9基于ASP.NET MVC 5框架开发,而ASP.NET MVC中global.asax文件包含全局应用程序事件的事件处理程序,它响应应用程序级别和会话级别事件的代码。

nop应用启动时调用 Application_Start

客户端请求时依次调用 Application_BeginRequest,Application_AuthenticateRequest,Application_EndRequest

请求未处理异常时调用 Application_Error

二.Application_Start做了什么?

当应用启动的时候调用Application_Start()进行初始化

1.指定传输层安全 (TLS) 1.2 安全协议。

2.隐藏header "X-AspNetMvc-Version" 属性

3.初始化nop引擎:EngineContext

4.初始化nop自带的视图引擎:ThemeableRazorViewEngine

5.初始化nop自带的模型元数据提供者:NopMetadataProvider

6.注册路由

7.初始化 Fluent validation(asp.net mvc model 验证框架) 进行MVC中Model验证

8.初始化任务管理器

9.初始化Miniprofiler进行性能分析(nop默认是关闭的)

10.记录启动日志

  1  /// <summary>
  2         /// 1.
  3         /// 不是每次请求都调用
  4         /// 在Web应用程序的生命周期里就执行一次
  5         /// 在应用程序第一次启动和应用程序域创建事被调用
  6         /// 适合处理应用程序范围的初始化代码
  7         /// </summary>
  8         protected void Application_Start()
  9         {
 10             //指定传输层安全 (TLS) 1.2 安全协议
 11             ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
 12
 13             //隐藏header "X-AspNetMvc-Version" 属性
 14             //disable "X-AspNetMvc-Version" header name
 15             MvcHandler.DisableMvcResponseHeader = true;
 16
 17             //初始化引擎
 18             EngineContext.Initialize(false);
 19
 20             //判断是否安装数据库
 21             bool databaseInstalled = DataSettingsHelper.DatabaseIsInstalled();
 22             if (databaseInstalled)
 23             {
 24                 //remove all view engines 移除视图引擎
 25                 ViewEngines.Engines.Clear();
 26                 //except the themeable razor view engine we use 使用nop自己的视图引擎 Admin Area在这里修改
 27                 ViewEngines.Engines.Add(new ThemeableRazorViewEngine());
 28             }
 29
 30             //Add some functionality on top of the default ModelMetadataProvider 使用nop的ModelMetadataProvider,处理NopResourceDisplayName,Html.NopLabelFor进行多语言显示
 31             ModelMetadataProviders.Current = new NopMetadataProvider();
 32
 33             //Registering some regular mvc stuff 注册MVC 物件(区域、路由)
 34             AreaRegistration.RegisterAllAreas();
 35             RegisterRoutes(RouteTable.Routes);
 36
 37             //fluent validation 使用 fluent validation 进行模型验证
 38             DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
 39             ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new NopValidatorFactory()));//Nop使用NopValidatorFactory进行进一步封装,同时验证类继承BaseNopValidator,BaseNopValidator添加了对数据库String最大长度及Decimal最大值的验证
 40
 41             if (databaseInstalled)
 42             {
 43                 //start scheduled tasks
 44                 TaskManager.Instance.Initialize();//初始化任务管理器
 45                 TaskManager.Instance.Start();//启动任务管理器
 46
 47                 //miniprofiler  使用miniprofiler进行性能分析
 48                 if (EngineContext.Current.Resolve<StoreInformationSettings>().DisplayMiniProfilerInPublicStore)
 49                 {
 50                     GlobalFilters.Filters.Add(new ProfilingActionFilter());
 51                 }
 52
 53                 //记录日志
 54                 try
 55                 {
 56                     //log
 57                     var logger = EngineContext.Current.Resolve<ILogger>();
 58                     logger.Information("Application started", null, null);
 59                 }
 60                 catch (Exception)
 61                 {
 62                     //don‘t throw new exception if occurs
 63                 }
 64             }
 65         }

protected void Application_Start()

三.Application_BeginRequest做了什么?

每次收到客户端请求都会调用

1.过滤静态资源 .css .gif .png 等

2.过滤keep alive请求(nop有个KeepAliveTask计划任务定时调用keep alive链接请求,个人理解这个计划任务是为了保持长链接,执行其他计划任务的时候提高性能,理解不对的欢迎留言)

3.判断数据库是否存在,不存在则重定向安装界面。(原理检查“App_Data/Settings.txt”中链接字符串是否存在)

4.开启miniprofiler 性能测试

四.Application_AuthenticateRequest

1.过滤静态资源

2.过滤keep alive请求

3.设置”地区属性” “语言属性”,因为nop是支持多语言的,如果是进入管理界面(/admin)则设置为‘en-US‘,其他则为当前选择的区域属性

五.Application_EndRequest

1.停止miniprofiler 性能测试

六.Application_Error

1.获取未处理的错误并记录到日志表中。(404不会记录)

2.404错误会重定向到Common/PageNotFound进行处理。

总结

Application_Start 对nop应用进行了初始化,包括AutoFac、AutoMapper、Fluent validation、Miniprofiler这些框架的初始化,还有nop EngineContext、nop 视图引擎、nop Model元数据提供者等nop封装类的初始化。

时间: 2024-10-17 21:25:06

nopCommerce 3.9 大波浪系列 之 global.asax的相关文章

nopCommerce 3.9 大波浪系列 之 使用Redis主从高可用缓存

一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发生单点故障,并且单服务器需要处理所有的请求会导致压力较大. 单台Redis服务器内存容量有限,不易扩展. 第一个问题可以通过Redis主从模式实现单节点的高可用(HA). 从节点(slave)是主节点(master)副本,当主节点(master)宕机后,Redis 哨兵(Sentinel)会自动将从

nopCommerce 3.9 大波浪系列 之 可退款的支付宝插件(上)

一.简介 nop通过插件机制可以支持更多的支付扩展,我们通过编写支持退款的支付宝插件来更好的理解支付插件的扩展. 先分享下支付宝插件源码点击下载,由于时间原因,本篇只介绍使用该插件,下一篇结合插件进行代码分析.       注意:测试时将项目部署在公网,这样才能接收来自支付宝的回调通知,否则无法接收支付宝回调会导致订单状态无法处理. 二.插件使用 1.将插件DaBoLang.Nop.Plugin.Payments.AliPay项目放置在"nopCommerce_3.90_Source\Plugi

nopCommerce 3.9 大波浪系列 之 微信公众平台登录插件

一.简介 nop支持第三方登录授权扩展,本篇通过编写微信公众平台登录插件进一步了解nop授权登录的开发过程. 微信公众平台.微信开放平台使用场景不一样,前者通过微信客户端进行开发如公众号,后者基于网站或第三方应用这里不多说,本插件是基于微信公众平台开发,因此测试需要使用到微信web开发者工具. 插件源码下载:点击下载 微信公众平台网站授权帮助地址:传送门 微信web开发者工具使用下载地址:传送门 微信公众平台接口测试账号申请地址:传送门 二.插件使用 1.将插件DaBoLang.Nop.Plug

nopCommerce 3.9 大波浪系列 之 开发支持多店的插件

一.基础介绍 nop支持多店及多语言,本篇结合NivoSlider插件介绍下如何开发支持多商城的小部件. 主要接口如下: ISettingService 接口:设置接口,可实现多店配置. ILocalizationService 接口:本地化资源接口,配合语言,实现多语言的显示. 二.插件安装.卸载 我们在上一篇介绍了小部件如何使用(点击这里),这里介绍下如何安装.卸载插件. [后台管理][插件管理][本地插件]可以对插件进行安装.卸载 Nop.Admin.Controllers.PluginC

nopCommerce 3.9 大波浪系列 之 可退款的支付宝插件(下)

一.回顾 支付宝插件源码下载地址:点击下载 上篇介绍了使用支付宝插件进行支付,全额退款,部分退款还有插件的多店铺配置,本文介绍下如何实现的. 二.前期准备 插件主要有3个功能: 多店铺插件配置 支付功能 退款功能 数据库支持: 新增dbl_PaymentInfo表保存支付记录. 新增dbl_RefundInfo表保存退款记录. 其他准备: 支付宝即时到账PID和MD5秘钥Key,可通过支付宝开放平台获取. 三.流程规划 插件安装卸载流程 2.  支付流程 3.  退款流程 四.创建项目 1. 

nopCommerce 3.9 大波浪系列 之 路由扩展 [多语言Seo的实现]

一.nop种的路由注册 在Global.asax,Application_Start()方法中会进行路由注册,代码如下. 1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("favicon.ico"); 4 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 5 6 //register custom

nopCommerce 3.9 大波浪系列 之 引擎 NopEngine

本章涉及到的内容如下 1.EngineContext初始化IEngine实例 2.Autofac依赖注入初始化 3.AutoMapper框架初始化 4.启动任务初始化 一.EngineContext初始化 nopCommerce应用启动时首先调用EngineContext.Initialize(false) 进行初始化引擎, 并对IEngine接口进行初始化.IEngine用于实现依赖注入和初始化工作.nop中使用Autofac进行依赖注入. 你会发现nop中很多如:EngineContext.

nopCommerce 3.9 大波浪系列 之 汉化-Roxy Fileman

官网:http://www.roxyfileman.com/ 中文包:zh.json 1.将zh.json包拷贝到Nop.Admin项目中"Content\Roxy_Fileman\lang\"下 2.conf.json修改"LANG":"auto" 1 { 2 "CreateDir":"创建", 3 "RenameDir":"重命名", 4 "Delete

nopCommerce 3.9 大波浪系列 之 汉化-中文语言

一.导入语言包 nop官网下载中文语言文件,下载后是一个xml文件. 打开xml文件我们可以看到LocaleResource节点Name属性为资源名称,Value节点为资源值. 后台[Confignuration][Languages]进入语言管理界面. 点击右上角Add new按钮按下图所示添加语言 点击[Save and Continue Edit]按钮保存并继续编辑. 点击[admin.configuration.languages.import ]按钮选择中文语言xml文件. 最后[ad