解读ASP.NET 5 & MVC6系列教程(1):ASP.NET 5简介
asp.net 5简介
asp.net 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦。为了这些改写,微软也是蛮 拼的,几乎把.net framwrok全部改写了一遍,形成了一个.net core的东西。 在.net core里一切都是可配置的,包括session、mvc等功能,而一切可配置的功能都是可以在nuget上进行下载。
目前asp.net 5依旧兼容老的.net framwrok,但要在进行跨平台的部署,还是只能使用新改版的.net core clr。
目前的asp.net 5包括6个子项目dependencyinjection、entityframework、identity、kruntime、mvc、signalr server,具体每个项目的介绍如下:
dependencyinjection - 基本的依赖注入管理并拥有默认实现
entityframework - 数据访问orm框架
identity - 用户认证系统
kruntime - 核心运行时、项目系统,加载器
mvc - mvc框架,整合了mvc、web api、web pages功能
signalr-server - 实时交互式服务
asp.net 5所有子项目的开源代码都可以在https://github.com/aspnet/上找到。
asp.net 版本号解释
5
新版的asp.net称为asp.net 5,是一个使用mvc架构开发web应用程序的框架,它还提供了开发restful服务的功能。另外,在下个版本里,该框架还可以使用signalr构建实时应用程序。注意,asp.net 5不再包含web form开发框架了。
5也是.net framework的新版本的版本号,称之为core50,也叫.net core。.net core是.net的重构版本,只保留原有框架中的最小化的功能集,对于其它的特性和功能,可以通过nuget下载以插件的形式运行。这就意味着,我们可以将其用于各种云环境进行独立部署。另外,微软还会提供一个跨平台的.net core,以便可以让asp.net程序部署到mac和unix/liunx服务器上。另外.net core框架还可以和程序一起进行打包部署,从而可以实现在同一台服务器上使用不同版本的.net core。
另外,还要注意,.net core不包括web form、windows form、wpf、wcf、silverlight、system.drawing、datatable等功能。也就是说,如果你的程序需要使用system.drawing进行缩略图制作的话,那就没办法使用了。类似的工具集只能通过nuget包进行下载了。可以通过工具查找当前程序和.net core的兼容性工具集。
4.5.2
4.5.2是当前.net framework全功能版的版本号。你可以使用该版本的.net来运行asp.net 5,甚至是4.5.1版本,使用该版本,可以使用整个.net体系的所有功能,只不过就不能跨平台了。
4.6
4.6是.net framework全功能版下一版的版本号,也是.net core的下一个版本号。你可以将asp.net 5应用程序运行在.net 4.6上,但运行在.net 4.6上的asp.net程序可能不兼容.net core。下一个版本的asp.net web forms也是4.6,其将包括一些增强功能,如异步模型绑定、http2、并开始使用roselyn编译器。现有的asp.net程序(web forms、mvc5和之前的版本、web pages)不需要任何修改都可以运行在.net 4.6上。
6
asp.net 5中的mvc、web api、web pages三个框架会合并成一个框架,统称为mvc6。该合并工作将删除三个框架中重复的功能,比如mvc和web api中的两种controller只保留一种。但是传统mvc的功能都会保留,比如模型绑定。不过,据说web pages在rtm的时候不会发布,而是会在rtm之后的第一次更新中进行发布。
mvc6会引入一些新功能,最引人注目的功能就是tag helpers和view components。tag helpers是html helpers的一种替换,而view components则引入里类似web forms中的webcontrol的概念。
比如,原来的视图模型定义是这样的:
@using (html.beginform("register", "account", formmethod.post, new { @class = "form-horizontal", role = "form" })) { @html.antiforgerytoken() <h4>create a new account.</h4> <hr /> @html.validationsummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @html.labelfor(m => m.username, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @html.textboxfor(m => m.username, new { @class = "form-control" }) </div> </div>
在新版mvc6中,我们可以使用tag helper进行定义:
<form asp-controller="account" asp-action="register" method="post" class="form-horizontal" role="form"> <h4>create a new account.</h4> <hr /> <div asp-validation-summary="validationsummary.modelonly" class="text-danger"></div> <div class="form-group"> <label asp-for="username" class="col-md-2 control-label"></label> <div class="col-md-10"> <input asp-for="username" class="form-control" /> <span asp-validation-for="username" class="text-danger"></span> </div> </div>
这样的话,就极大地方便了前端开发人员了,因为可以看到正常的html结构了。
view components则解决了child action的问题,比如很多时候,我们都是通过html.action来实现菜单、标签功能。如下是一个view component的示例:
public class greetingviewcomponent : viewcomponent { public iviewcomponentresult invoke() { var greeting = "good morning!"; if (datetime.now.hour > 12) { greeting = "good afternoon!"; } if (datetime.now.hour > 17) { greeting = "good evening!"; } return view("index", greeting); } }
该视图组件(view component)也需要响应的视图文件,示例如下:
@model string <h3>@model</h3>
调用代码则需要使用权限的component.invoke方法,示例如下:
<div> @component.invoke("greeting") </div>
另外还有一个component.invokeasync方法,可以用于异步调用。关于视图组件的详细用法,请参考视图组件一章。
7
7是entity framework的下一个版本,虽然不属于asp.net 5的一部分,但有很大关系。ef7将和asp.net 5的rtm版本一起发布,虽然可能延期,但至少在那个时候会有一个可以在.net core上运行的基本orm包,其不包括延迟加载、继承映射、并且只适应于sql server。如果不在跨平台上运行mvc6程序的话,你可以在.net 4.5.2或4.6中继续使用ef6,
asp.net5和mvc6中的10大新变化
在新版asp.net5和mvc6中,有很多变化,有些是彻底的变化,比如在最底层支持依赖注入技术,为了方便了解,我们这里列出了最重要的10大变化,以便进行学习,具体如下:
asp.net 5现在已经是跨平台了,可以在mac和linux上运行。
不再有web forms框架了。
只支持c#,不在支持vb.net了。(貌似最近又听说最终版vb.net又要支持了)
新的tag语法,@html.labelfor或html.textboxfor替换成新语法<label asp-for="name">或<input asp-for="name" />,以便进行模型绑定。
新增视图组件(view component),可以将局部内容定义为一个单独的组件进行调用,和web forms里的webcontrol非常像。
拥抱前端技术,内置了nodejs、npm、grunt、bower技术。
模型整合,将mvc和webapi整合成一个框架。
支持angularjs,帮内置了angularjs的module、controller、directive、以及factory模板。
支持依赖注入技术,拥有原生的di框架,并且也支持第三方容器。
支持xunit.net,并抛弃了visual studio unit testing框架。
ide
vs2015:vs2015就不用说了,依然高大上,目前不仅支持nodejs、python开发,还支持android和ios开发。
visual studio code:为了能够在mac或linux操作系统上也能编写c#程序,微软又发布了一个 visual studio code轻量级编辑器可以使用上述操作系统,依然是高大上啊,新功能和特性瞬间秒杀sublime text和brackets,详细地址请访问:https://code.visualstudio.com/ 。
参考:http://stephenwalther.com/archive/2015/02/24/top-10-changes-in-asp-net-5-and-mvc-6
推荐阅读
-
解读ASP.NET 5 & MVC6系列教程(3):项目发布与部署
-
解读ASP.NET 5 & MVC6系列教程(4):核心技术与环境配置
-
解读ASP.NET 5 & MVC6系列教程(7):依赖注入
-
解读ASP.NET 5 & MVC6系列教程(9):日志框架
-
解读ASP.NET 5 & MVC6系列教程(5):Configuration配置信息管理
-
解读ASP.NET 5 & MVC6系列教程(8):Session与Caching
-
解读ASP.NET 5 & MVC6系列教程(12):基于Lamda表达式的强类型Routing实现
-
解读ASP.NET 5 & MVC6系列教程(6):Middleware详解
-
解读ASP.NET 5 & MVC6系列教程(11):Routing路由
-
解读ASP.NET 5 & MVC6系列教程(13):TagHelper