一.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.记录启动日志

  /// <summary>
/// 1.
/// 不是每次请求都调用
/// 在Web应用程序的生命周期里就执行一次
/// 在应用程序第一次启动和应用程序域创建事被调用
/// 适合处理应用程序范围的初始化代码
/// </summary>
protected void Application_Start()
{
//指定传输层安全 (TLS) 1.2 安全协议
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //隐藏header "X-AspNetMvc-Version" 属性
//disable "X-AspNetMvc-Version" header name
MvcHandler.DisableMvcResponseHeader = true; //初始化引擎
EngineContext.Initialize(false); //判断是否安装数据库
bool databaseInstalled = DataSettingsHelper.DatabaseIsInstalled();
if (databaseInstalled)
{
//remove all view engines 移除视图引擎
ViewEngines.Engines.Clear();
//except the themeable razor view engine we use 使用nop自己的视图引擎 Admin Area在这里修改
ViewEngines.Engines.Add(new ThemeableRazorViewEngine());
} //Add some functionality on top of the default ModelMetadataProvider 使用nop的ModelMetadataProvider,处理NopResourceDisplayName,Html.NopLabelFor进行多语言显示
ModelMetadataProviders.Current = new NopMetadataProvider(); //Registering some regular mvc stuff 注册MVC 物件(区域、路由)
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes); //fluent validation 使用 fluent validation 进行模型验证
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new NopValidatorFactory()));//Nop使用NopValidatorFactory进行进一步封装,同时验证类继承BaseNopValidator,BaseNopValidator添加了对数据库String最大长度及Decimal最大值的验证 if (databaseInstalled)
{
//start scheduled tasks
TaskManager.Instance.Initialize();//初始化任务管理器
TaskManager.Instance.Start();//启动任务管理器 //miniprofiler 使用miniprofiler进行性能分析
if (EngineContext.Current.Resolve<StoreInformationSettings>().DisplayMiniProfilerInPublicStore)
{
GlobalFilters.Filters.Add(new ProfilingActionFilter());
} //记录日志
try
{
//log
var logger = EngineContext.Current.Resolve<ILogger>();
logger.Information("Application started", null, null);
}
catch (Exception)
{
//don't throw new exception if occurs
}
}
}

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封装类的初始化。

本文地址:http://www.cnblogs.com/yaoshangjin/p/7217299.html

本文为大波浪原创、转载请注明出处。

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

  1. nopCommerce 3.9 大波浪系列 之 引擎 NopEngine

    本章涉及到的内容如下 1.EngineContext初始化IEngine实例 2.Autofac依赖注入初始化 3.AutoMapper框架初始化 4.启动任务初始化 一.EngineContext初 ...

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

    一.nop种的路由注册 在Global.asax,Application_Start()方法中会进行路由注册,代码如下. public static void RegisterRoutes(Route ...

  3. nopCommerce 3.9 大波浪系列 之 网页加载Widgets插件原理

    一.插件简介 插件用于扩展nopCommerce的功能.nopCommerce有几种类型的插件如:支付.税率.配送方式.小部件等(接口如下图),更多插件可以访问nopCommerce官网. 我们看下后 ...

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

    一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发 ...

  5. nopCommerce 3.9 大波浪系列 之 使用部署在Docker中的Redis缓存主从服务

    一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发 ...

  6. nopCommerce 3.9 大波浪系列 之 IWebHelper

    接口:Nop.Core.IWebHelper 实现:Nop.Core.WebHelper 测试:Nop.Core.Tests.WebHelperTests 简介:Web辅助类 功能:获取客户端IP地址 ...

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

    官网:http://www.roxyfileman.com/ 中文包:zh.json 1.将zh.json包拷贝到Nop.Admin项目中"Content\Roxy_Fileman\lang ...

  8. nopCommerce 3.9 大波浪系列 之 事件机制(生产者、消费者)

    一.nop事件机制简介 应用场景:客户支付成功后,需要发送短信.邮件告知客户订单支付成功(短信.邮件由不同模块实现) 实现方法: 1.定义支付成功OrderPaidEvent事件. 2.定义短信,邮箱 ...

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

    一.基础介绍 nop支持多店及多语言,本篇结合NivoSlider插件介绍下如何开发支持多商城的小部件. 主要接口如下: ISettingService 接口:设置接口,可实现多店配置. (点击接口介 ...

随机推荐

  1. OVS + kernel datapath 的安装

    ***kernel datapath的OVS编译安装 下载源代码 $ git clone https://github.com/openvswitch/ovs.git 准备工具:生成configure ...

  2. Python使用PyMysql操作数据库

    安装 pip install -U pymysql 连接数据库 连接数据库有两种不同的格式 直接使用参数 代码如下 import pymysql.cursors connection = pymysq ...

  3. WPF界面XAML中的if……else……

    xaml本身并不支持if--else--,要用Converter替代if--else--来实现我们想要的效果,知者请速离开,不要浪费时间   需求:按照Window的WindowState来决定Gri ...

  4. Coursera 机器学习笔记(八)

    主要为第十周内容:大规模机器学习.案例.总结 (一)随机梯度下降法 如果有一个大规模的训练集,普通的批量梯度下降法需要计算整个训练集的误差的平方和,如果学习方法需要迭代20次,这已经是非常大的计算代价 ...

  5. cpp(第九章)

    1.静态外部,不在任何函数内定义.静态内部,不在任何函数内,使用关键字static.静态无连接性,在代码块中,使用关键字static. 2.静态变量会自动零初始化. 3.单定义规则,在每个使用外部变量 ...

  6. PhpStorm 设置之主题

    一 打开设置 File --> settings 二 设置窗口字体.大小.主题 Appearance & Behavior --> Appearance 下面是本人自己比较偏爱的一 ...

  7. 用Backtrack进行渗透测试评估

    Web应用程序的分析在渗透测试和漏洞评估中发挥了重要的作用.确定Web应用程序的正确信息(例如使用的插件,CMS类型等)都可以帮助测试者使用准确的漏洞来测试,能够降低整个渗透测试漏洞评估所花费的时间. ...

  8. 水平方向的RecyclerView

    最近做了一个项目需要实现一个卡片式的水平滑动,但是不能手势滑动,点击卡片上的按钮之后滑动到下一个卡片,所以想到用RecyclerView实现,去掉它的手势滑动,点击按钮之后再代码控制滑动到下一个卡片. ...

  9. AmpOne

    AmpOne 基于Windows平台的Apache .PHP.Mysql 开发环境 | One intergrated tools package of Apache + PHP + MySQL fo ...

  10. 【转载】Windows系统下删除ubuntu

    原始日期:2013-11-02 15:51 以windows7为例:   用MbrFix.exe修复MBR 卸载Windows/Linux双系统中的Ubuntu1.如果你有Windows系统安装盘/启 ...