AngularJSASP.NET Core: 全新的ASP.NET !

背景

新式版本的 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 的社会风气。

AngularJS 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 是一个跨平台的周转时,由此你可以在 OSX 或 Linux
操作系统上安排你的使用;它也是一个云优化的运行时,用于在云上部署和调试应用;.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,可是现在还并未 SignalR 和 Web
Pages。,它也不协助VB 和 F# 语言。

ASP.NET Core 不再只依靠Visual Studio

ASP.NET
Core

的跨平台,让它不再只依靠 Visual
Studio,开发者和设计师们可以在和谐喜爱的条件上行事。比如 Sublime
Text,WebStorm ,这真是太棒了!

新的工程解决方案结构

倘若您利用 Visual Studio 创制了一个空的 ASP.NET Core
工程,那么您将会面到下面的大悲大喜。(除非你未曾动用从前的 ASP.NET
创造过任何项目)

AngularJS 2

你倍感到惊喜了吧?新的工程协会完全不一致了,
工程模板赏心悦目,包含以下的新文件:

· global.json: 你可以在此处放置解决方案的布局音讯和工程期间的引用。

· Program.cs: 这么些文件包含了 ASP.NET Core RC2 应用的 Main
方法,负责布置和开行应用程序。

· src folder: 包含组成你应用程序的整套档次代码。

· wwwroot:
你的静态文件将被停放在这个文件夹,它们都将用作资源平昔提供给客户端,包含
HTML,CSS 和 JavaScript 文件。

· project.json: 包含项目安装。在 ASP.NET Core中,你可以因而采取NuGet 程序包管理工具(NPM)添加 NuGet
包或者编辑那么些文件来管理从属。你可以经过其余公文编辑器来编排这么些文件,若是你使用
Visual Studio 2015,,这将会越来越 轻松,因为它的智能指示会赞助你找到适合的
NuGet 包作为从属。project.json 就像下边这样。

AngularJS 3

· startup.cs 这些重中之重播置你 ASP.NET Core 的 stratup 和 configuration
代码,上边就是 stratup 类的榜样。

AngularJS 4

Configure瑟维斯(Service)s 方法定义了您应用程序使用的劳务,Configure
方法用来定义组成请求管道的中间件。

· References: 它蕴含了 .NETCoreApp 第一个本子运行时的引用。

WebForms

不错,WebForms 不再是 ASP.NET 5 的一有的,这真令人悲伤。你可以继承行使
VS2015 的 .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 统一架构

AngularJS 5

ASP.NET Core 将见证 MVC, Web API 和 Web
Pages(可能带有)组合在一个架构中,它被喻为 ASP.NET MVC
Core。即使目前揭橥版本中,还不援助 Web Pages and SignalR。

在往日的 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() 襄助方法一般用来调用一个
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 指令允许你注入一个类中的方法到你的视图中。

这是一个简单易行的类,来呈现一些异步的不二法门。

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
耦合度很高,所以要想运行在另一台主机上会非常不方便。

后来 OWIN 作为应用程序和 Web 服务器中间的接口现身。
Microsoft 开发了 Katana 作为一个
OWIN 的落实,可以安排 ASP.NET Web API, SignalR
和其余第三方框架,这些框架可以在 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 2015 中另一个那些酷的特点就是永葆动态编译。在过去的
ASP.NET
中,当大家修改了接纳的后台代码,我们需要再行编译并且运行才能看到页面的变型。
在新本子的 Visual Studio
中,你不需要再做那个额外的手续,仅仅是保存你的修改和刷新浏览器即可。

AngularJS 6

这是在刷新页面之后的输出:

AngularJS 7

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

在过去的 MVC 和 Web API
中,使用路由属性可能会招致有些问题,尤其是您正在做一些代码重构。这是因为路由必须设定为字符串类型,当您改改了控制器的名字,你就亟须修改路由属性的字符串

MVC Core 提供了新的 [controller] 和 [action]
标记,它们得以化解这一个问题。下边这篇作品重点表达了这么些新标志的用法。 :
ASP.NET MVC 6 Attribute
Routing
.

集成的借助注入 (DI)

ASP.NET Core 内嵌了对看重注入和 瑟维斯(Service)(Service) Locator
格局的支撑,这象征你不在需要经过第三方依赖注入框架 Ninject 或
AutoFac。

集成 Grunt, Gulp and Bower

Visual Studio 2015 内嵌了对流行开源 Web 开发工具的支撑。 Grunt 和 Gulp
可以帮你自动化构建 Web 开发工作流, 你可以应用它们来编译和削减
JavaScript 文件。Bower 是一个用于客户端库的管理工具,包含 CSS 和
JavaScript 库。

内置的AngularJs模板

AngularJs
是眼下最盛行的前端框架之一,用于构建单页面应用程序(SPAs)。Visual
Studio 包含了用于创立 AngularJs 模块,控制器,指令和工厂。

AngularJS 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 也是以 SignalR 3
为根基,这使得你可以向云连接的应用程序添加实时效果。查看自己事先的 SignalR
例子: ASP.Net SignalR: Building a Simple Real-Time Chat
Application

Web.Config

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

这是一个新的配备文件的榜样:

AngularJS 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 被当作一个开源项目托管到
GitHub上,
你可以查看源代码,并下载并付出你的转移。

自我认同开源的 .NET
会生出第一的意义,它爆发了积极向上的商贸意义和社区意义,十分感谢微软所做出的干活。

以上 ASP.NET Core 1.0
的新特色和新定义的介绍,是为着更好的拉扯我们采用 ASP.NET Core
举办开发,同时在支付过程中,大家还足以凭借一些好的工具来增长开支效能,并压缩代码量,如 ComponentOne
Studio for Asp.net
MVC
,它非凡 ASP.NET
Core RC2 版本,是一款快捷轻量级的控件来满足用户的保有需求。

 

作品来源:By 文森特(Vincent) Maverick Durano, 10 Jun 2016 

原文链接: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正经版发布全纪录

 

相关文章