1. 前言 做为一个.NET Web开发者,我最伤心的时候就是项目开发部署时面对Windows Server上贫瘠的解决方案,一样是神器Nginx,Win上的Nginx便始终不如Linux上的,你或许会说“干吗不用windows自带的NLB呢”,那这就是我这个小鸟的从众心理了,君不见Stack Overflow 2016最新架构中,用的负载和缓存技术也都是采用在Linux上已经成熟的解决方案吗。没办法的时候找个适合的解决办法是好事,有办法的时候固然要选择最好的解决办法。json 所幸,.ASP.NET Core出现了,它顺应了开源大趋势,摆脱了一直为人诟病的Win Server,以ASP.NET的跨平台版本出如今了咱们的眼前。暂且不论Benchmark中无聊的性能比较,也不探讨未来是否能和JAVA,PHP Web应用平起平坐,可是至少对咱们.NET平台开发者来讲,咱们多了一种开发方向,也多了一个尝试前沿成熟技术的机会。所谓工欲善其事,必先利其器,咱们先来看看ASP.NET Core是什么吧。windows 2. ASP.NET Core 简介 2.1 什么是ASP.NET Core ASP.NET Core 是一个新的开源和跨平台的框架,用于构建如 Web 应用、物联网(IoT)应用和移动后端应用等链接到互联网的基于云的现代应用程序。后端 ASP.NET Core 应用可运行于 .NET Core 和完整的 .NET Framework 之上。它整合了原来ASP.NET中的MVC和WebApi框架,你能够在 Windows、Mac 和 Linux 上跨平台的开发和运行你的 ASP.NET Core 应用。浏览器 2.2 ASP.NET Core的特色 ASP.NET Core 在架构上作出了一些改变,这些改变会使它成为一个更为精简而且模块化的框架。在project.json文件中咱们能够发现,ASP.NET Core 再也不基于 System.Web.dll(咱们在project.json中见到的大部分都是Microsoft打头) ,基于一系列颗粒化的,而且良好构建的 NuGet 包,结合智能提示,它可以让你经过仅仅包含须要的 NuGet 包的方法来优化你的应用。一个更小的应用程序接口经过“只为你须要的功能付出”(pay-for-what-you-use)的模型得到的好处包括更可靠的安全性、简化服务、改进性能和减小成本。缓存 Tips:经过 Ctrl+F5(非调试模式)启动这个应用程序容许你进行代码更改,保存文件,刷新浏览器,以后查看代码改变。许多开发者更倾向于使用非调试模式来快速启动应用程序和查看变化。安全 如下列举其余几个改良特色性能优化 开源和跨平台架构 知足运行在.NET Core和.NET Framework上app 中间件支持框架 性能优化 无所不在的依赖注入 标准日志记录 整合MVC和Web Api到一个框架中 MVC 标签帮助 CLI工具 2.3 ASP.NET Core 项目文件夹解读 ASP.NET Core 1.0 发布以来,相较于传统项目编码发布的行为,新项目中的操做已经有了很大的变化,如解析依赖,选择运行平台和Runtime等等,就连项目结构也有了比较大的改变,愈来愈多的配置选项由编辑器转交给了开发者手动决定,这一点在新的各种配置文件中体现得尤其明显,这里就来简单解读一下。 Tips:顺便吐槽一下都Upadte3了,最新的.NET Core项目中,Visual操做中仍是有好多明显的bug呀。 2.3.1 项目文件夹总览  2.3.2 project.json和global.json project.json是.NET Core项目中最重要的一个配置文件,它相似于.NET Framework上的 .csrpoj文件(在下一版本中.NET Core将弃用该文件,转而回归.csrpoj)。因此这里仍是搬运下张大大的博客吧,包括对global.json的解读。 project.json 这葫芦里卖的什么药 2.3.1 Properties——launchSettings.json 顾名思义——启动配置文件。launchSettings.json文件为一个ASP.NET Core应用保存特有的配置标准,用于应用的启动准备工做,包括环境变量,开发端口等。在launchSettings.json文件中进行配置修改,和开发者右键项目——属性中所提交的更改的效果是同样的(目前右键属性中的Property真是少得可怜),而且支持同步更新。
{
'iisSettings': { #选择以IIS Express启动
'windowsAuthentication': false, #是否启用windows身份验证
'anonymousAuthentication': true, #是否启用匿名身份验证
'iisExpress': {
'applicationUrl': 'http://localhost:24269/', #IIS Express随机端口
'sslPort': 0
}
},
'profiles': {
'IIS Express': {
'commandName': 'IISExpress',
'launchBrowser': true,
'environmentVariables': {
'ASPNETCORE_ENVIRONMENT': 'Development'
}
},
'WebApplication': { #选择本地自宿主启动,详见Program.cs文件。删除该节点也将致使Visual Studio启动选项缺失
'commandName': 'Project', #
'launchBrowser': true,
'launchUrl': 'http://localhost:5000', #本地自宿主端口
'environmentVariables': {
'ASPNETCORE_ENVIRONMENT': 'Development'
}
}
}
}
2.3.4 Startup.cs Startup.cs文件是ASP.NET Core的启动入口文件,想必尝试过OWIN开发的必定不会陌生。项目运行时,编译器会在程序集中自动查找Startup.cs文件读取启动配置。除了构造函数外,它能够定义Configure和ConfigureServices方法。 (1) 构造函数 用来启动配置文件Configuration
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile('appsettings.json', optional: true, reloadOnChange: true)
.AddJsonFile($'appsettings.{env.EnvironmentName}.json', optional: true)
.AddEnvironmentVariables();
if (env.IsDevelopment()) //读取环境变量是否为Development,在launchSettings.json中定义
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
Configuration = builder.Build();
}
(2) ConfigureServices ConfigureServices 用来配置咱们应用程序中的各类服务,它经过参数获取一个IServiceCollection 实例并可选地返回 IServiceProvider。ConfigureServices 方法须要在 Configure 以前被调用。咱们的Entity Framework服务,或是开发者自定义的依赖注入(ASP.NET Core自带的依赖注入也是无所不在),更多内容请见官方文档
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
(3) Configure Configure 方法用于处理咱们程序中的各类中间件,这些中间件决定了咱们的应用程序将如何响应每个 HTTP 请求。它必须接收一个IApplicationBuilder参数,咱们能够手动补充IApplicationBuilder的Use扩展方法,将中间件加到Configure中,用于知足咱们的需求。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection('Logging'));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler('/Home/Error');
}
app.UseApplicationInsightsExceptionTelemetry();
app.UseStaticFiles();
app.UseMvc(routes => //MVC路由配置
{
routes.MapRoute(
name: 'default',
template: '{controller=Home}/{action=Index}/{id?}');
});
}
2.3.5 bundleconfig.json bundleconfig.json是一个压缩包的集合文件(这个不是很明白),这里有一篇bundleconfig.json specs,大意是它能够自动压缩关联文件用于项目中,如生成 |