最新版本的 ASP.NET 叫做 ASP.NET Core (也被称为 ASP.NET 5) 它颠覆了过去的 ASP.NET。
ASP.NET Core 1.0是一个开源跨平台的开发框架,用于构建基于云的现代 Web 应用 。它是从底层开始重新构建来提供性能优良的Web应用开发框架,可以部署在云上或者本地服务器上。另外,它使得 ASP.NET 应用更加精简和模块化(可以根据你的应用需要向里面添加其他模块),跨平台(你可以很容易的在 Windows, Mac or Linux 上开发和部署你的应用),云优化(你可以在云上在云上部署和调试你的应用)。
对于使用 ASP.NET 旧版本的我们来说,这意味着什么?
nerror="javascript:errorimg.call(this);">
下面列出 ASP.NET Core 1.0 的核心变化.
你可以在 OSX 和 Linux上运行 ASP.NET Core 应用,这对于 ASP.NET 来说,这具有跨时代的意义,也给 ASP.NET 开发者和设计师们带来了全新的体验。ASP.NET Core 具有两个运行时,这意味着你可以选择不同的运行环境来部署你的应用,使得你的应用将更加灵活。
你也可以创建只运行在 windows 下完整 .NET 框架的 ASP.NET Core 应用。
需要明确的是,ASP.NET 4.6 更加成熟。它如今久经考验并且现已发布并可使用。ASP.NET Core 1.0 是1.0 发布版本,包含 Web API 和 MVC,但是现在还没有 SignalR 和 Web Pages。,它也不支持VB 和 F# 语言。
ASP.NET Core的跨平台,让它不再只依赖 Visual Studio,开发者和设计师们可以在自己喜欢的环境上工作。比如 Sublime Text,WebStorm ,这真是太棒了!
如果你使用 Visual Studio 创建了一个空的 ASP.NET Core 工程,那么你将会看到下面的惊喜。(除非你没有使用之前的 ASP.NET 创建过任何项目)
你感觉到惊喜了吗?新的工程结构完全不一样了, 工程模板焕然一新,包含以下的新文件:
· Program.cs: 这个文件包含了 ASP.NET Core RC2 应用的 Main 方法,负责配置和启动应用程序。
· wwwroot:你的静态文件将被放置在这个文件夹,它们都将作为资源直接提供给客户端,包含 HTML,CSS 和 Javascript 文件。
nerror="javascript:errorimg.call(this);">
nerror="javascript:errorimg.call(this);">
· References: 它包含了 .NETCoreApp 第一个版本运行时的引用。
是的,WebForms 不再是 ASP.NET 5 的一部分,这真令人悲伤。你可以继续使用 VS2015 的 .NET 4.6 来构建 Web Forms 应用,但是却不能体会 ASP.NET 5 的新特性了。
除了 WebForms, the .NET Core 也没有包含 Windows Forms, WCF, WPF, Silverlight 等等。
目前,在当前 ASP.NET Core 1.0 RC2版本中, VB.NET 和 F# 也不被支持。
nerror="javascript:errorimg.call(this);">
在之前的 ASP.NET MVC 中, MVC 控制器和 Web API 控制器是不同的。 一个 MVC 控制器使用基类 System.Web.MVC.Controller,一个 Web API 控制器使用基类System.Web.Http.ApiController。 在 MVC Core 中,会为它们提供一个共同的基类,就是Microsoft.AspNetCore.Mvc.Controller。
View Components
View Components 支持完全异步,这允许你创建异步的视图组件。
下面是 View Component 的视图:
<h3>Person List</h3>
<ul>
@foreach (var p in Model) {
<li>@string.Format("{0} {1}",p.FirstName,p.LastName)</li>
}
</ul> 新指令: @inject, @using, @inherits
这是一个简单的类,来展示一些异步的方法。
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);
}
}
} 这是不是很酷?
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>
}ASP.NET Core 不止可以部署在IIS上
后来 OWIN作为应用程序和 Web 服务器中间的接口出现。 Microsoft 开发了Katana作为一个 OWIN 的实现,可以部署 ASP.NET Web API, SignalR 和其他第三方框架,这些框架可以在 IIS 和 IIS Express, Katana's 自托管主机和自定义主机。
新的HTTP请求管道
动态的Web开发
nerror="javascript:errorimg.call(this);">
nerror="javascript:errorimg.call(this);">
在过去的 MVC 和 Web API 中,使用路由属性可能会导致一些问题,尤其是你正在做一些代码重构。这是因为路由必须设定为字符串类型,当你修改了控制器的名字,你就必须修改路由属性的字符串
集成的依赖注入 (DI)
集成 Grunt, Gulp and Bower
内置的AngularJs模板
nerror="javascript:errorimg.call(this);">
SignalR 3
Web.Config
这是一个新的配置文件的样子:
由于 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"});
});
}在之前的 ASP.NET MVC 中,默认的测试框架是 Visual Studio 单元测试框架(有时候也叫作mstest),这个框架使用 [TestClass] 和 [TestMethod] 特性来描述一个单元测试。
绝对的免费和开源
我认同开源的 .NET 会产生重大的意义,它产生了积极的商业意义和社区意义,十分感谢微软所做出的工作。
文章来源:By Vincent Maverick Durano, 10 Jun 2016
