解读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

(0)

相关推荐

  • ASP.NET MVC Web API HttpClient简介

    1.HttpClient简单介绍 依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NET MVC4中自带了一个类HttpClient,用于接收HttpResponseMessage和发送HttpRequestMesssage. 问题在于既然WebClient,HttpWebRequest可以完成相应的功能,为什么还要使用HttpClient类,.NET Framework中既然提出了这样一个类肯定是有其特别之处的,这里罗列几个不同之处: (1) 可

  • ASP.NET Global.asax应用程序文件简介

    你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题--当然是在你没有使用它的情况下..asax 文件扩展名指出它是一个应用程序文件,而不是一个使用 aspx 的 ASP.NET 文件. Global.asax 文件被配置为任何(通过 URL 的

  • ASP.NET Core简单介绍教程(1)

    ASP.NET Core 是一个全新的开源.跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web 应用,IoT(Internet Of Things,物联网)应用和移动后端等.ASP.NET Core可以运行在 .NET Core 或完整的 .NET Framework 之上,其架构为发布到云端或本地运行的应用提供了一个最佳的开发框架,由开销很小的模块化组件构成,这就保持了你构造解决方案的灵活性.你可以跨平台地在Windows.Mac和Linux等设备上开发和运行你的 ASP.N

  • 关于.NET动态代理的介绍和应用简介

    引言 假如现在我们有这样在这个示例中我将使用尽可能简单的逻辑实现所有功能需求,这将更突出我们所要解决的核心问题.例子是一个简单计算器类: public class Calculator{ public int Add(int x, int y) { return x + y; }} 这个类再简单不过了,不过若你将它想象为一个可能更复杂的业务处理类的时候,你将面临除了核心功能实现之外的更多处理细节,比如说:权限控制.审计日志.性能监测.缓冲处理.事务环境等等.为简单起见,我们首先为该类增加记录日志

  • .NET中的repeater简介及分页效果

    Repeater控件是一个数据绑定容器控件,它能够生成各个项的列表,并可以使用模板定义网页上各个项的布局.当该页运行时,该控件为数据源中的每个项重复此布局. 配合模板使用repeater控件 若要使用repeater控件,需创建定义控件内容布局的模板.模板可以包含标记和控件的任意组合.如果未定义模板,或者模板都不包含元素,则当应用程序运行时,该控件不显示在页面上. ItemTemplate : 含要为数据源中每个数据项都要呈现一次的 HTML 元素和控件. AlternatingItemTemp

  • 解读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. 目前的A

  • 解读ASP.NET 5 & MVC6系列教程(11):Routing路由

    新版Routing功能介绍 在ASP.NET 5和MVC6中,Routing功能被全部重写了,虽然用法有些类似,但和之前的Routing原理完全不太一样了,该Routing框架不仅可以支持MVC和Web API,还支持一般的ASP.NET5程序.新版的改变有如下几个部分. 首先,Routing系统是基于ASP.NET 5的,是一个独立于MVC的路由框架,而不是基于MVC的.MVC只是在上面扩展了一个快捷方式而已. 其次,在ASP.NET 5中,MVC和Web API控制器没有区别了,即合二为一了

  • 解读ASP.NET 5 & MVC6系列教程(13):TagHelper

    在新版的MVC6中,微软提供了强大的TagHelper功能,以便让我们摆脱如下的臃肿代码: @Html.LabelFor(model => model.FullName) @Html.EditFor(model => model.FullName) @Html.ValidationMessageFor(model => model.FullName) 引入新功能TagHelper以后,我们只需要这样定义就可以了,代码如下: @addTagHelper "*, Microsoft

  • 解读ASP.NET 5 & MVC6系列教程(12):基于Lamda表达式的强类型Routing实现

    前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义.本章,我们将讲述一种基于Lambda表达式的强类型类型. 这种方式的基本使用示例如下: services.Configure<MvcOptions>(opt => { opt.EnableTypedRouting(); opt.GetRoute("homepage", c =>

  • 解读ASP.NET 5 & MVC6系列教程(7):依赖注入

    在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Injection),ASP.NET 5正式将依赖注入进行了全功能的实现,以便开发人员能够开发更具弹性的组件程序,MVC6也利用了依赖注入的功能重新对Controller和View的服务注入功能进行了重新设计:未来的依赖注入功能还可能提供更多的API,所有如果还没有开始接触依赖注入的话,就得好好学一下了. 在之前版本的依赖注入功能里,依赖注入的入口有MVC中的IControllerFactory和Web A

  • 解读ASP.NET 5 & MVC6系列教程(17):MVC中的其他新特性

    (GlobalImport全局导入功能) 默认新建立的MVC程序中,在Views目录下,新增加了一个_GlobalImport.cshtml文件和_ViewStart.cshtml平级,该文件的功能类似于之前Views目录下的web.config文件,之前我们在该文件中经常设置全局导入的命名空间,以避免在每个view文件中重复使用@using xx.xx语句. 默认的示例如下: @using BookStore @using Microsoft.Framework.OptionsModel @a

  • 解读ASP.NET 5 & MVC6系列教程(16):自定义View视图文件查找逻辑

    之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写,所有的视图引擎都继承于该IViewEngine接口,比如默认的RazorViewEngine.但新版本MVC6中,对视图文件的路径方式却不太一样了,目前有两种方式,一种是通过RazorViewEngine,另外一种是通过新特性IViewLocationExpander接口. 通过RazorViewEngine来控制View路径

  • 解读ASP.NET 5 & MVC6系列教程(15):MvcOptions配置

    程序模型处理 IApplicationModelConvention 在MvcOptions的实例对象上,有一个ApplicationModelConventions属性(类型是:List<IApplicationModelConvention>),该属性IApplicationModelConvention类型的接口集合,用于处理应用模型ApplicationModel,该集合是在MVC程序启动的时候进行调用,所以在调用之前,我们可以对其进行修改或更新,比如,我们可以针对所有的Control

  • 解读ASP.NET 5 & MVC6系列教程(14):View Component

    在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为MVC中没有类似Web Forms中的WebControl的功能.但在MVC6中,这一功能得到了极大的改善.新版MVC6中,提供了一种叫做View Component的功能. 你可以将View Component看做是一个mini的Controller--它只负责渲染一小部分内容,而非全部响应,所有Partial View能解决的问题,你都可以使用View Component来解决,比如:动态

  • 解读ASP.NET 5 & MVC6系列教程(10):Controller与Action

    我们知道在MVC5和之前的版本,两个框架的生命周期是不一样的,在新版MVC6中,MVC Controller/Web API Controller已经合二为一了,本章我们主要讲解Controller和Action的定义与使用,以及在MVC框架中,如何根据路由查询相应的Controller和Action. Controller&Action的定义和使用 在新版MVC6框架中,依然提供了一个Controller基类,在这里除了依然提供了Url.RouteData.HttpContext.Reques

随机推荐