新特性:

vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存)。 
可以self-host模式运行,网站不再需要依赖IIS而运行,由此从此可以快速向客户演示开发进度,以及更好地支持真正跨平台(Linux、Mac、Unix)。 
Web Api、Web Pages与MVC完全融为一体,统称MVC 6.0。在过去,输出JSON,既可以使用MVC自带的return JSON,也可以使用Web Api,这样分而治之的场面给整个社区都带来不良影响(JSON仅是其中一个例子,其它很多功能都是一样),现在,Web Api 完全融入了vNext,重复的轮子在这里终于得到终结。 
支持Poco形式的Controller,代码更加干净。 
云优化技术,也就是说在开发阶段,系统本身并不真正加载某个组件,而是在运行时才查询合适版本的组件,由此带来的好处是在Azure云主机、Mono主机和Windows主机上可以依赖最合适当前环境的某个组件Dll。 
内置了依赖注入框架 
使用Roslyn编译器,生成的代码更高效 
 
与1~5.x的差异:

1:Project.json代替了从前的Web.config:

  • 项目包的依赖项在dependencies节点中定义。
  • configurations节点保存的是项目设置信息。
  • commands节点保存的是self-host配置参数,例如本地绑定端口号。
  • 自定义节点,例如自定义一个Data节点,在它的作用域中再定义一个DefaultConnectionString来记录数据库连接字符串。

2:Startup.cs代替了Global.asax 
 
3:Views文件夹中不再需要专门的Web.config

当你添加某个引用(例如Entity Framework)的时候,需要网络实时加载,所以如果遇到“找不到某某类库”的错误时,不要担心,过一会就好了。但是,有可能在某个良辰吉日里,你无论等多久都没用,因为我们身在天朝,你懂的。 
 
================================================ 
 
MVC的基本概念不变,依然是从前的 RouteTable、Controller、View、Action、Razor、Model

下面的教程中涉及到加载包,以及各个包的版本号,例如"0.1-alpha-build-0403",也许你看到这篇文章的时候,版本号已经不适用了,最简单的解决办法是创建一个现成的ASP.NET vNext Web Application(注意不是空项目),它会加载当前可用的常用包,对照里面的对应包的版本号。

如果需要输出静态文件,例如 .html、.jpg,需要加载专门的处理流程,它们保存在Microsoft.AspNet.StaticFiles中。

下面我们开始构建一个vNext站点

创建一个ASP.NET vNext 空项目

之后得到的目录结构,比从前简单多了:

首先配置project.json,在dependencies节点添加:

"Microsoft.AspNet.StaticFiles": "0.1-alpha-build-0403" //支持静态文件输出 
保存后,注意左下角的状态变化:
 
恢复操作时基于网络的,只有等待它恢复完毕后,才算是加载完成,如果你发现没有这两个步骤出现,请试试你懂的方法,nuget服务器在美国,我只能告诉你到这了。

配置Startup.cs:

using System;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.StaticFiles;
using Microsoft.Framework.DependencyInjection;
using Microsoft.AspNet.Routing;

namespace vNextTry
{
    public class Startup
    {
        public void Configure(IBuilder app)
        {
            app.UseStaticFiles();  //支持静态文件输出 

            app.UseServices(services =>
            {
                services.AddMvc();  //加载MVC模块
            });

            app.UseMvc(routes => //加载路由配置
            {
                routes.MapRoute(
                    name: "Default",
                    template: "{controller}/{action}/{id?}",
                    defaults: new { controller = "Home", action = "Index" });
            });
        }
    }
}

添加一个传统Controller:

using Microsoft.AspNet.Mvc; 

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

添加一个Poco Controller:

public class JsonData //不需要继承自任何类
{
    public dynamic Index()
    {
        //就这样以非常干净简洁的方式输出JSON: {"id":1,"name":"i'm haha"}
        return new { id = 1, name = "i'm haha" };
    }
}

添加一个View
注意放置在Views/{controller名}/{这里是Index}.cshtml,母版页就不做了,Model、RenderBody等方法都和从前一样:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>vNext</title>
</head>
<body>
  <p>I'm vNext Index Page</p>
</body>
</html>

一切就此完成。现在就可以运行测试看看。

以self-host模式运行应用程序
self-host是MVC6的最大特点,我们的应用程序不再需要配置巨大的IIS,使得在客户机上快速演示应用程序不再困难。
通过设置project.json配置self-host(注意5001,那就是绑定的端口):

dependencies节点添加:"Microsoft.AspNet.Server.WebListener": "0.1-alpha-build-0520"

"commands": { 
    "web": "Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:5001" 
}

然后保存、发布到输出目录(注意一定要先保存,等待nuget恢复加载包)

然后运行输出目录下的web.cmd,即可开启服务。

以IIS模式运行应用程序: 
目前只能发布到安装了开发环境的本机IIS,但是根据它的运行逻辑,原则上也可以配置某些参数,让程序在远程服务器上运行,目前还没尝试,就不说了。
如是是64位系统,可能会遇到找不到KRE-svr50-x64.0.1-alpha-build-0446的问题,目前微软只提供了32位版本,我们只有把应用程序池设置为32位模式运行就可以解决了。

使用Web Api:
变得更简单了: 
1:在Startup.cs中配置路由:
app.UseMvc(routes => 

    routes.MapRoute("ApiRoute", "{controller}/{id?}"); 
}); 
 
2:在controller中:

using Microsoft.AspNet.Mvc; 

public class ValuesController : Controller
{
    // GET /values
    public string Get()
    {
        return "Values";
    } 

    // GET /values/1
    public string Get(int id)
    {
        return "Value " + id.ToString();
    } 

    // POST /values
    public ActionResult Post()
    {
        return new HttpStatusCodeResult(201);
    }
}

  

就这样,不再需要加载任何包或DLL,不需要配置任何专有Config,API已经完全融合到MVC6中,访问 localhost:端口号/api类名

总体使用结论

如果使用Visual Studio进行调试的过程中出现所有页面都“无法访问”,检查IIS Express的当前服务端口是否弹出IE窗口的端口一致,如果不一直,把Visual Studio关掉(并且检查系统进程,确保不再存在相关进程),重新打开Visual Studio就可以了。

因为包的加载涉及到运行时从nuget.org加载,所以某些把App放置在国内主机商的朋友们要做好心理准备。

为了不久的将来vNext运行于*nix系统,现在就应该注意一些事项:

    1. 严格遵守单词的大小写,特别是涉及到路径的字符串,vNext是为“真正全平台”打造的,否则将来你的程序在*nix系统(内核级就区分字母大小写)中运行会出错。
    2. 依然是*nix系统的问题,请不要再使用GB2312等奇葩编码,应该全局(源代码文件本身、Razor文件本身、Response.Encoding、Meta--CharSet、ConnectionString)统一使用UTF8,否则乱码百出找不到原因。

在续篇《vNext 云优化的概念、Entity Framework 7.0、简单吞吐量压力测试》中解释关于云优化、结合EF7、目前vNext的性能。

下面是推荐几篇相关文档:

在Linux上运行ASP.NET vNext

POCO Controller 你这么厉害,ASP.NET vNext 知道吗?

分享我对 ASP.NET vNext 的一些感受,也许多年回过头看 So Easy!

开发 ASP.NET vNext 初步总结(使用Visual Studio 14 CTP1)的更多相关文章

  1. 开发 ASP.NET vNext 初步总结(使用Visual Studio 2015 Preview )

    新特性: vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存). 可以self-host模式 ...

  2. 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

    继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...

  3. Visual Studio “14” CTP 4

    微软发布于10月6日发布了Visual Studio "14"CTP 4,本次发布的更新主要包括:ASP.NET vNext runtime和一些工具的优化(ASP.NET vNe ...

  4. 微软 Visual Studio 14 CTP2 发布

    对于在微软阵营下进行工作的团队来说,拥有最新版本的 Visual Studio 是提高效率最佳的选择,没有之一. 在本文中,我们就上个月发布的 Visual Studio "14" ...

  5. 微软Visual Studio "14" CTP 2 发布

    微软Visual Studio "14" CTP 2 发布 对于在微软阵营下进行工作的团队来说,拥有最新版本的Visual Studio是提高效率最佳的选择,没有之一. 在本文中, ...

  6. [转载]Getting Started with ASP.NET vNext and Visual Studio 14

    说在转载之前的话:ASP.NET框架之前不断做大,而vNext则是从头开始,对ASP.NET框架进行拆分并瘦身,面对不同的需求而更加灵活,各个拆分出来的模块更加轻量.vNext的出现,对ASP.NET ...

  7. 006.Adding a controller to a ASP.NET Core MVC app with Visual Studio -- 【在asp.net core mvc 中添加一个控制器】

    Adding a controller to a ASP.NET Core MVC app with Visual Studio 在asp.net core mvc 中添加一个控制器 2017-2-2 ...

  8. Visual Studio “14” CTP 3 Released

    http://blogs.msdn.com/b/visualstudio/archive/2014/08/18/visual-studio-14-ctp-3-released.aspx Today w ...

  9. python setup.py install 报错:error: [WinError 3] 系统找不到指定的路径。: 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\PlatformSDK\\lib

    Outline 在通过 setup.py 安装python模块时,遇到了以下报错: # 执行 python setup.py install # 报错: error: [WinError 3] 系统找 ...

随机推荐

  1. 自己手写的自动完成js类

    在web开发中,为了提高用户体验,会经常用到输入框的自动完成功能,不仅帮助用户进行快速输入,最重要的是帮助那些“记不全要输入什么”的用户进行选择.这个功能有很多插件已经实现了,为了适应项目的特殊需求, ...

  2. 【工具】VS2010常用调试技巧(1)

    调试是一个程序员最基本的技能,其重要性不言自明.不会调试的程序员就意味着他即使会一门语言,却不能编制出好的软件.本文就本人在开发过程中常用的调试技巧作下简单呢介绍,希望对大家有所帮助,能力超群者请绕道 ...

  3. Scala Macros - 元编程 Metaprogramming with Def Macros

    Scala Macros对scala函数库编程人员来说是一项不可或缺的编程工具,可以通过它来解决一些用普通编程或者类层次编程(type level programming)都无法解决的问题,这是因为S ...

  4. angularjs 弹出框 $modal

    angularjs 弹出框 $modal 标签: angularjs 2015-11-04 09:50 8664人阅读 评论(1) 收藏 举报  分类: Angularjs(3)  $modal只有一 ...

  5. 微信小程序社区上线

    微信小程序公测了! 从首次得到微信小程序发布的消息开始,小木和Michael就进入了紧急备战状态. 除了要快速学通微信小程序开发之外,我们还做了这些工作: 1.录制全球首套微信小程序实战项目类视频教程 ...

  6. Linux 性能监测:工具

    一个完整运行的 Linux 系统包括很多子系统(介绍,CPU,Memory,IO,Network,-),监测和评估这些子系统是性能监测的一部分.我们往往需要宏观的看整个系统状态,也需要微观的看每个子系 ...

  7. ArcGIS Engine开发之书签加载

    ArcGIS中书签是保存特定视图范围的快捷方式.使用书签保存关注的视图范围,可在需要时快速定位.查看与浏览.书签功能主要用到IMapBookmarks.ISpatialBookmark和IAOIBoo ...

  8. 使用WebRTC搭建前端视频聊天室——入门篇

    http://segmentfault.com/a/1190000000436544 什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两 ...

  9. 【转】iOS UIApplication详解

    1.状态栏UIStateBar的设置是在UIApplication里面设置的,它包含4中风格 2. - (void)beginIgnoringInteractionEvents; (void)endI ...

  10. iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ②)

    距上一篇博客"APP引导页的高度集成 - DHGuidePageHUD - ①"的发布有一段时间了, 后来又在SDK中补充了一些新的内容进去但是一直没来得及跟大家分享, 今天来跟大 ...