ASP.NET 5 理解和入门html
使用自定义配置文件web
首先,目前只有VS 2015支持开发最新的ASP.NET 5 程序,因此咱们首先须要下载安装其最新的RC版本.json
https://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs.aspx浏览器
安装完毕之后,打开并创建新的Web Application项目:app
而后在后一个界面中选择ASP.NET 5 Empty模板:框架
这里提2个注意点:async
创建项目完成之后,咱们能够看到以下项目结构:函数
其中global.json记录了解决方案的一些配置,Project_Readme.html则是一个介绍页面.visual-studio
比较重要的文件或者文件夹是如下3个:学习
l Startup.cs : 启动类
l project.json: 项目配置文件
l wwwroot : 整个WebApp的静态文件目录(因为最小模板没有加载静态文件中间件,因此该目录内容暂时无效,这个稍后说明)
ASP.NET 5的启动类只有一个,这里再也没有Global.asax,RouteConfig等耳熟能详的启动文件,而只剩下这个Startup.cs是ASP.NET 5的惟一入口。
通常状况下Startup类会包含3个主要函数: 构造函数,ConfigureServices和Configure
在最小模板下,咱们仅仅看到后面2个函数,没有构造函数,虽然不是必须的,但构造函数在读取初始化参数的环境下也是很是重要的,这个咱们之后再介绍.
咱们能够这样来理解这3个函数的做用:
构造函数: 加载各类配置文件和配置信息.
ConfigureServices: 加载各类基于依赖注入(Dependency Injection)的服务,这里提下,在ASP.NET 5中,依赖注入技术获得了充分的使用,大大优化了代码的结构.
Configure: 加载各类须要的中间件(Middleware),这个概念和Owin中间件概念是一致的,和原来IIS中的HttpModule很是的相似.
ASP.NET 5 内置标准的Config文件只有一个: project.json. 其余配置文件都是自定义并自行装载的。固然,在Solution目录有一个global.json文件,但这个和ASP.NET 5主体项目关系不大。另外在project.json之下,还隐藏了一个project.lock.json,其本质内容是记载了大量.NET运行环境(DNX)内置的组件信息,这个文件是由VS自行管理的,因此这个文件咱们目前也先略过。
关于.NET运行环境(DNX)是VS 2015之后为适应多平台运行环境所提出的全新的概念,这个概念对理解ASP.NET编译和运行环境相当重要,不过此内容不在本文的讨论范围之内,若是要深刻理解,请经过我上一篇博文ASP.NET 5 (vNext) 理解和概述 中提供的超链来进一步学习.
那么咱们开始进入project.json
"webroot": "wwwroot",
"version": "1.0.0-*",
前者定义了WebApp静态文件的根目录,通常不须要修改;后者定义了整个项目的版本号.
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta4",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta4"
},
除了.Net运行环境DNX内置组件外,项目所需加载的外部组件,目前只有2个Server组件: IIS和控制台,这2个组件可让当前的WebApp运行在IIS或者控制台程序.
这里稍微提下,能够经过这个配置段落的智能感知快速的给当前项目加入组件,这个牛逼的特性咱们下面详细介绍.
"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
},
这里定义项目内部内置的各类命令,因为控制台Server模式必须由一个命令启动,因此在此定义了一个web命令行.经过启动这个命令就能启动控制台Server模式.通常来讲,VS提供了启动这个命令内在机制,但咱们要理解,ASP.NET实际上是经过DNX环境的核心命令dnx.exe来运行外部命令的,关于这个命令我感受目前整合的并不完美,并且这个命令存在于一个很是诡异的地方,关于这部份内容咱们再后面的博文在进一步讨论.
"frameworks": {
"dnx451": { },
"dnxcore50": { }
},
定义该项目能够运行的.Net Framework版本,默认同时支持4.5.1和5.0 Core版本,去掉任何一个都是能够的,固然要注意5.0尚未最终Release,还须要注意有些组件可能在5.0 Core版本上会有兼容问题,这个时候就必须进行取舍.
"publishExclude" 和 "exclude"主要影响发布和编译时的内容选择.对主功能影响不大.
好,下面咱们来运行下看看是什么效果,选择web方式(控制台Server)运行,会弹出一个控制台程序:
而后用浏览器访问http://localhost:5000 (这个URL和project.json中web command的参数配置相吻合),能够看到 一个有“Hello World”的页面.
为何最小模板下会有这个页面,咱们能够看到其实在Startup的Configure函数中有这样一段代码:
public void Configure(IApplicationBuilder app) { app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
这里用Lambda表达式实现了一个很是小型的中间件,固然这块代码没有什么特别意义,能够去除.
正如我上一篇文章全部,ASP.NET 5的组件必需经过Nuget进行管理,但实际操做中,却能够有2种方式。
经过Nuget安装,这个用过VS2013的同窗都应该很是熟悉了,固然VS2015界面略有不一样,并且更加准确,功能更完整,你们具体看一下就了解了.
而我想特别推荐的是第二种方式,在project.json文件的dependencies小节,直接使用智能感知进行添加.
固然首先咱们要引入StaticFile组件,利用直接修改project.json的方式,能够进行快速的添加:
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta4",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
//Static Files
"Microsoft.AspNet.StaticFiles": "1.0.0-beta4"
},
修改并保存以后,VS会自动把这个组件加载到当前项目的全部Framework中:
下面咱们来加载静态文件的中间件,咱们知道,全部中间件是经过Startup的Configure函数来加载的,咱们把这个函数原有的代码替换为以下代码.
public void Configure(IApplicationBuilder app) { //加载静态文件中间件 app.UseStaticFiles(); }
根据前面的说明咱们知道静态文件中间件会把根目录默认设定为wwwroot,下面咱们再这个目录下创建一个index.html,里面放入任何内容.
这时候再次启动整个项目(web方式)经过http://localhost:5000/index.html 就能够访问到这个页面. (反之,若是你没有添加app.UseStaticFiles();这个页面是访问不到的)
下面咱们稍微扩充下,若是咱们想把index.html设置为咱们的默认文档,咱们应该如何去作,其实很简单,在StaticFiles组件中,还提供了另一个中间件来实现这个功能,咱们回到Configure函数再加入以下代码便可:
public void Configure(IApplicationBuilder app) { //设定静态文件的默认文档 app.UseDefaultFiles(new DefaultFilesOptions() { DefaultFileNames = new string[] { "index.html" } }); //加载静态文件中间件 app.UseStaticFiles(); }
这个时候须要引入
using Microsoft.AspNet.StaticFiles;
另外UserDefaultFIles必须在UserStaticFiles以前运行.
而后从新启动项目,会发现直接访问 http://localhost:5000 就能看到index.html页面.
固然StaticFiles中间件仅仅是一个起步,一个真正有意义的Web Application还须要更多的内容,下面我会依次介绍在ASP.NET 5项目中如何加入MVC 6, WebApi 2, Entity Framework 7, MS Identity 3的实现方法. 敬请期待.