背景

摩登版本的 ASP.NET 叫做 ASP.NET Core (也被喻为 ASP.NET 5)  
它颠覆了千古的 ASP.NET。

什么是 ASP.NET Core?

ASP.NET Core 1.0
是一个开源跨平台的支付框架,用于创设基于云的当代 Web 应用
。它是从底层开端重复打造来提供品质卓绝的Web应用开发框架,可以安插在云上大概当地服务器上。别的,它使得
ASP.NET
应用特别简明和模块化(可以依照你的接纳需求向其中添加其它模块),跨平台(你可以很不难的在
Windows, Mac or Linux
上支出和布局你的利用),云优化(你可以在云上在云上布署和调剂你的接纳)。

原先的版本

对于使用 ASP.NET 旧版本的大家来说,这表示如何?

假若您正在利用旧版本的 ASP.NET 大概您有 WebForms
的付出背景,那么你将会认得到 ASP.NET Core
有多完美,那感觉起来就好像从古典的 ASP 时期到来全新的 ASP.NET 的社会风气。

json 1

近日,让大家来一探讨竟

下边列出 ASP.NET Core 1.0 的着力变化.

跨平台的周转时

您可以在 OSX 和 Linux上运转 ASP.NET Core 应用,那对于 ASP.NET
来说,这全体跨时期的意义,也给 ASP.NET
开发者和设计师们带来了全新的心得。ASP.NET Core
具有多少个运营时,这意味着你可以选拔差异的运行条件来布局你的利用,使得你的利用将更为灵活。

ASP.NET Core 1.0 是三个 ASP.NET
的重构版本,它运转于新型的 .NET
Core。它是模块化的,允许开发者以插件的格局充足应用所急需的模块,大部分的成效都将作为插件提供并透过
NuGet
程序包管理。那样做的贰个功利就是您可以荣升使用的壹个模块,但丝毫不会影响此外模块;此外,.NET
Core 是2个跨平台的运营时,由此你可以在 OSX 或 Linux
操作系统上配备你的采取;它也是3个云优化的周转时,用于在云上安顿和调节应用;.NET
Core 可以和您的应用程序一起被布置,当服务器上有三个 .NET Core 版本时,
你如故可以运作 ASP.NET Core 应用。

您也足以创设只运维在 windows 下整体 .NET 框架的 ASP.NET Core 应用。

ASP.NET 4.6 是流行的共同体 .NET Framework
的宣布版本,它同意你可以利用全数的 .NET
组件并且存有向后分外能力。如果您陈设将应用迁移到 .NET
core,那么你必要做适当的改动,因为 .NET Core 相对于完全 .NET Framework
来说具有限制。

急需肯定的是,ASP.NET 4.6
越发成熟。它近来练习并且现已发布并可选拔。ASP.NET Core 1.0 是1.0
发表版本,包涵 Web API 和 MVC,不过以后还尚无 Signal奥德赛 和 Web
Pages。,它也不辅助VB 和 F# 语言。

ASP.NET Core 不再只依靠Visual Studio

ASP.NET
Core

的跨平台,让它不再只依靠 Visual
Studio,开发者和设计师们方可在温馨喜好的条件上工作。比如 Sublime
Text,WebStorm ,那正是太棒了!

新的工程化解方案结构

即使您使用 Visual Studio 创造了2个空的 ASP.NET Core
工程,那么你将会看出上面的喜怒哀乐。(除非您从未接纳此前的 ASP.NET
创造过其余类型)

json 2

您感觉到惊喜了吗?新的工程结构完全不等同了,
工程模板气象一新,包括以下的新文件:

· global.json: 你可以在那边放置消除方案的配置新闻和工程时期的引用。

· Program.cs: 那些文件包括了 ASP.NET Core 奥迪Q7C2 应用的 Main
方法,负责布置和起步应用程序。

· src folder: 包涵组成你应用程序的整个连串代码。

· wwwroot:
你的静态文件将被放置在那一个文件夹,它们都将作为资源一向提须求客户端,包涵HTML,CSS 和 JavaScript 文件。

· project.json: 包含项目安装。在 ASP.NET Core中,你可以因而采取NuGet 程序包管理工具(NPM)添加 NuGet
包只怕编辑那个文件来管理从属。你可以经过其余公文编辑器来编排那几个文件,如若你使用
Visual Studio 贰零壹陆,,这将会越来越 轻松,因为它的智能提示会支持你找到适当的
NuGet 包作为从属。project.json 如同上面那样。

json 3

· startup.cs 这几个重大放置你 ASP.NET Core 的 stratup 和 configuration
代码,上边就是 stratup 类的楷模。

json 4

ConfigureServices 方法定义了你应用程序使用的劳务,Configure
方法用来定义组成请求管道的中间件。

· References: 它包涵了 .NETCoreApp 第四个版本运营时的引用。

WebForms

正确,WebForms 不再是 ASP.NET 5 的一有的,这真令人优伤。你能够继承利用
VS二零一六 的 .NET 4.6 来打造 Web Forms 应用,可是却不可以体味 ASP.NET 5
的新特征了。

自个儿早就付出了不少年从小型到大型的专营商级 Web Forms 应用。 作者很喜爱 Web
Forms,,事实上小编还会一连辅助在各类论坛应用 WebForms 的社区,比如
http://forums.asp.net。不过我们是时候进步了,去学学一些新东西。那是读书
ASP.NET MVC 最终的小时了,就像过去的不可胜计东西,你如故去适应,要么被淘汰。

除却 WebForms, the .NET Core 也绝非包涵 Windows Forms, WCF, WPF,
Silverlight 等等。

VB.NET and F\

目前,在当前 ASP.NET Core 1.0
RC2
 版本中,
VB.NET 和 F# 也不被扶助。

MVC Core 统一架构

json 5

ASP.NET Core 将见证 MVC, Web API 和 Web
Pages(只怕包蕴)组合在二个架构中,它被称为 ASP.NET MVC
Core。即便近期发表版本中,还不协理 Web Pages and Signal大切诺基。

在事先的 ASP.NET MVC 中, MVC 控制器和 Web API 控制器是例外的。 三个 MVC
控制器采纳基类 System.Web.MVC.Controller ,一个 Web API
控制器接纳基类 System.Web.Http.ApiController 。 在 MVC Core
中,会为它们提供三个齐声的基类,就是
Microsoft.AspNetCore.Mvc.Controller

对于 HTML Helpers 来说,MVC 和 Web Pages 的见面是可怜有恐怕的。 Web
Pages
编程模型对脚下版本的话还不适用,所以我们还不可以负义务地说下一步安顿合并哪些特色。
可是大家得以推测到,古板的 MVC 模型绑定将会现出。

View Components

在头里 ASP.NET MVC 中,, Html.Action() 帮忙方法一般用来调用3个sub-controller。ASP.NET MVC Core 将会接纳新的 View Components
用来顶替使用Html.Action() 的预制构件。

View Components 协理完全异步,那允许你成立异步的视图组件。

下边是一个不难的视图组件的例证,根据身份会重回个人介绍。

using Microsoft.AspNetCore.Mvc;  
using MVC6Demo.Models;  
using System.Threading.Tasks;  
using System.Collections.Generic;  

namespace MVC6Demo.ViewComponents  
{  
    public class PersonListViewComponent : ViewComponent  
    {  
        public async Task<iviewcomponentresult> InvokeAsync(string status) {  
            string viewToUse = "Default";  
            bool isFiltered = false;  

            PersonModel model = new PersonModel();  

            if (status.ToLower().Equals("registered")) { 
                viewToUse = "Registered"; isFiltered = true; 
            }  

            var p = await GetPersonAsync(status, isFiltered);  
            return View(viewToUse,p);  
        }  

        private Task<ienumerable<person>> GetPersonAsync(string status, bool isFiltered) {  
            return Task.FromResult(GetPerson(status,isFiltered));  
        }  
        private IEnumerable<person> GetPerson(string status, bool isFiltered) {  
            PersonModel model = new PersonModel();  

            if (isFiltered)  
                return model.GetPersonsByStatus(status);  
            else  
                return model.GetAll;  

        }  
    }  
}  </person>

下面是 View Component 的视图:

<h3>Person List</h3>  
<ul>  
    @foreach (var p in Model) {  
        <li>@string.Format("{0} {1}",p.FirstName,p.LastName)</li>  
    }  
</ul> 

那里突显了何等在主视图中调用 View Components

<div>   
    @await Component.InvokeAsync("PersonList", new { type = "Registered" })
</div>  

新指令: @inject, @using, @inherits

ASP.NET MVC Core 提供了少量新命令。 上边我们来看看哪些行使 @inject。
@inject 指令允许你注入3个类中的方法到你的视图中。

那是多个不难的类,来显示一些异步的方法。

using System.Threading.Tasks;  
using System.Linq;  

namespace MVC6Demo.Models  
{  
    public class Stats  
    {  
        private PersonModel _persons = new PersonModel();  

        public async Task<int> GetPersonCount() {  
            return await Task.FromResult(_persons.GetAll.Count());  
        }  

        public async Task<int> GetRegisteredPersonCount() {  
            return await Task.FromResult(
                      _persons.GetAll.Where(o => o.Status.ToLower().Equals("registered")).Count());  
        }  

        public async Task<int> GetUnRegisteredPersonCount() {  
            return await Task.FromResult(
                     _persons.GetAll.Where(o => o.Status.ToLower().Equals("")).Count());  
        }  
    }  
} 

前几天大家就可以在视图中应用 @inject 指令来调用那多少个方法:

@inject MVC6Demo.Models.Stats Stats  

@{  
    ViewBag.Title = "Stats";  
}  

<div>  

那是还是不是很酷?

翻开本人有关 ASP.NET MVC 新指令详细例子的篇章: Getting Started with
ASP.NET MVC
Core

Tag Helpers

ASP.NET MVC Core 别的贰个十分酷的事物就是 Tag Helpers。对于之前的 HTML
Helpers,Tag Helpers 是可选的替代语法。

据此比较于以下代码:

@using (Html.BeginForm("Login", "Account", FormMethod.Post, 
        new { @class = "form-horizontal", role = "form" }))
            {
                @Html.AntiForgeryToken()
                <h4>Use a local account to log in.</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" })
                        @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })
                    </div>
                </div>
}

您可以采用这么些代码:

<form asp-controller="Account" asp-action="Login" method="post" class="form-horizontal" role="form">  
    <h4>Use a local account to log in.</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="col-md-2 control-label" />  

        </div>  
    </div>  
</form> 

ASP.NET Core 不止可以安插在IIS上

14年前,ASP.NET 平台基本只可以安顿在一种服务器上,那就是
IIS。几年未来,Visual Studio Development Web
Server(也叫作“Cassini”)作为一种开发服务被应用,不过它们最终都以调用
System.Web 作为应用程序和 Web 服务器中间的主机层。System.Web 主机与 IIS
耦合度很高,所以要想运转在另一台主机上会11分辛勤。

后来 OWIN 作为应用程序和 Web 服务器中间的接口现身。
Microsoft 开发了 Katana 作为1个OWIN 的落到实处,可以配备 ASP.NET Web API, SignalCR-V和其余第一方框架,那个框架可以在 IIS 和 IIS Express, Katana’s
自托管主机和自定义主机。

ASP.NET Core 是不强调主机的,它在 Katana 和 OWIN 上行事无异于。ASP.NET
Core 也得以安插在 IIS, IIS Express
恐怕自托管在你协调的进度里。其它,ASP.NET Core 也会包涵三个叫做
Kestrel 的 Web
服务器,它成立在 libuv 上,紧要用来 iOS 和 Linux 操作系统。

新的HTTP请求管道

ASP.NET Core 提供了一种特别模块化的 HTTP 请求管道,
你可以只添加你要求的零件。那个管道不再依赖System.Web,通过下跌管道中的费用,你的 app 品质进一步美妙,更好的友善 HTTP
协议栈。新的管道基于 Katana 项目经验,同时协理 OWIN。

动态的Web开发

Visual Studio 2016 中另一个要命酷的风味就是接济动态编译。在过去的
ASP.NET
中,当大家修改了选择的后台代码,我们要求再行编译并且运营才能来看页面的生成。
在新本子的 Visual Studio
中,你不要求再做那几个额外的手续,仅仅是保留你的修改和刷新浏览器即可。

json 6

那是在刷新页面之后的出口:

json 7

Attribute Routing: [controller] 和 [action] 标记

在过去的 MVC 和 Web API
中,使用路由属性可能会导致部分难题,特别是你正在做一些代码重构。那是因为路由必须设定为字符串类型,当你改改了控制器的名字,你就亟须修改路由属性的字符串

MVC Core 提供了新的 [controller] 和 [action]
标记,它们可以化解这几个标题。上边那篇文章重点表达了那个新标志的用法。 :
ASP.NET MVC 6 Attribute
Routing
.

合龙的依赖注入 (DI)

ASP.NET Core 内嵌了对看重注入和 Service Locator
形式的支撑,那表示你不在必要通过第叁方看重注入框架 Ninject 或
AutoFac。

集成 Grunt, Gulp and Bower

Visual Studio 2014 内嵌了对流行开源 Web 开发工具的支撑。 Grunt 和 Gulp
可以帮您自动化打造 Web 开发工作流, 你可以动用它们来编译和压缩
JavaScript 文件。Bower 是一个用以客户端库的管理工具,包蕴 CSS 和
JavaScript 库。

内置的AngularJs模板

AngularJs
是当下最流行的前端框架之一,用于营造单页面应用程序(SPAs)。Visual
Studio 包蕴了用来创立 AngularJs 模块,控制器,指令和工厂。

json 8

对 GruntJS 的襄助使得 ASP.NET 成为三个用来创设客户端 AngularJs
应用的可以服务器端框架。 当落成一个版本,你可以自行合并和减少全部AngularJs 文件。查看本人的关于初步在 ASP.NET 中动用 Angular 和 Angular2
的稿子 。

· ASP.NET 5: Jump Start to AngularJS with MVC 6 Web
API

· ASP.NET Core:Getting Started with AngularJS
2

SignalR 3

ASP.NET Core 也是以 Signal奥迪Q7 3
为底蕴,那使得你可以向云连接的应用程序添加实时效果。查看自个儿事先的 Signal途锐例子: ASP.Net SignalR: Building a Simple Real-Time Chat
Application

Web.Config

在 ASP.NET Core 中,混乱的 web.config
文件被新的云就绪配置文件替代,它称作
“config.json”。微软指望开发人士更易于地在云中配置应用程序,并使得应用可以依据特殊环境自动的读取正确的布局参数。

那是1个新的配置文件的样子:

json 9

出于 ASP.NET Core 都以插件化的,你必要配备 Stratup
类的源代码,就好像上面那样:

 public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath);

            builder.AddEnvironmentVariables();
            Configuration = builder.Build();
        }
        public IConfigurationRoot Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddTransient<MVC6Demo.Models.HeroStats>();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseDeveloperExceptionPage();


            app.UseMvc(m => {
                m.MapRoute(
                    name: "default",
                    template: "{controller}/{action}/{id?}",
                    defaults: new { controller = "Home", action="Index"});
            });
        }

xUnit.Net: .NET 新的单元测试工具

在事先的 ASP.NET MVC 中,默认的测试框架是 Visual Studio
单元测试框架(有时候也叫作mstest),这么些框架使用 [TestClass] 和
[TestMethod] 特性来讲述一个单元测试。

ASP.NET Core 使用 xUnit.net
作为它的单元测试框架。那些框架使用 [Fact] 性格来代替 [TestMethod]
本性,也消除了对 [TestClass] 属性的依靠。

绝对的免费和开源

科学,ASP.NET Core 被用作1个开源项目托管到
GitHub上,
你能够查看源代码,并下载并提交你的更动。

自身认同开源的 .NET
会爆发非常紧要的意思,它爆发了当仁不让的经贸意义和社区意义,十二分多谢微软所做出的工作。

如上 ASP.NET Core 1.0
的新特征和新定义的牵线,是为了更好的帮扶大家使用 ASP.NET Core
举办支付,同时在支付进度中,大家还足以凭借一些好的工具来升高开销功效,并压缩代码量,如 ComponentOne
Studio for Asp.net
MVC
,它十一分 ASP.NET
Core EnclaveC2 版本,是一款快捷轻量级的控件来满意用户的保有需要。

 

json,文章来源:By Vincent Maverick Durano, 10 Jun 二零一五 

原文链接:http://www.codeproject.com/Articles/1104668/Introducing-ASP-NET-Core-The-New-ASP-NET-in-Town

 

连锁阅读:

是什么让C#成为最值得学习的编程语言

从Visual
Studio看微软20年技术生成

C#开发人士应该了解的13件业务

Visual Studio
2017正规版发表全纪录

 

相关文章

网站地图xml地图