.NET Core 1.0.0 RC2

在.NET Core 1.0.0 RC2即将正式发布之际,我也应应景,针对RC2 Preview版本编写一个史上最简单的MVC应用。由于VS 2015目前尚不支持,VS Code的智能感知尚欠火候,所以我们直接采用最原始的记事本来编写这个MVC应用。[源代码从这里下载]

目录
步骤一、安装最新的.NET Core SDK
步骤二、定义源代码和配置
        定义NuGet.xml
        定义Project.json
        定义入口程序
        定义初始化类型
        定义Controller
步骤三、运行程序
        恢复NuGet包
        编译执行程序
        向HomeController发起请求

步骤一、安装最新的.NET Core SDK

我们可以根据自身的操作系统环境从https://github.com/dotnet/cli上下载.NET Core最新的SDK,这个SDK包含.NET Core Runtime和一些有用工具(比如命令行)。如果你已经安装了老旧的版本,我个人建议你先将其卸载。

目前的版本为1.0.0-preview1-002702,我们可以执行dotnet –version命令确认是否是这个版本。

步骤二、定义源代码和配置

我们创建一个目录(假设为C:\HelloWorld)来存放MVC应用所有的源文件。下图展现了定义在这个目录下的所有文件。

定义NuGet.xml

我们在NuGet.xml文件中定义应用程序使用的NuGet包所在的站点地址(https://www.myget.org/F/aspnetvnext/api/v3/index.json)。

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <configuration>
   3:   <packageSources>
   4:     <add key="RC2" value="https://www.myget.org/F/aspnetvnext/api/v3/index.json" />
   5:   </packageSources>
   6: </configuration>

定义Project.json

定义在Project.json文件中的所有配置如下所示,我们会发现它与RC1中的Project.json不太一样。RC2中,我们可以向定义普通依赖一样来选择运行时(Microsoft.NETCore.App),或者说运行时本质已经成为了一个一般意义上的以来。除了这个针对运行时的依赖,我们还添加了两个依赖,它们分别是“Microsoft.AspNetCore.Mvc”和“Microsoft.AspNetCore.Server.Kestrel”,前者定义了ASP.NET Core MVC的核心框架,后者则提供了一个针对Kestrel的Server (ASP.NET Core管道中的Server专门负责请求的监听、接收和回复)。我们在“framework”节点添加了一个名为“netcoreapp1.0”的框架,之前的名称叫做“dnxcore50”。

   1: {
   2:   "version": "1.0.0-*",
   3:   "buildOptions": {
   4:     "emitEntryPoint": true
   5:   },
   6:   "dependencies": {
   7:     "Microsoft.NETCore.App": {
   8:       "type": "platform",
   9:       "version": "1.0.0-rc2-3002702"
  10:     },
  11:     "Microsoft.AspNetCore.Mvc":"1.0.0-rc2-final",
  12:     "Microsoft.AspNetCore.Server.Kestrel":"1.0.0-rc2-final"
  13:   },
  14:   "frameworks": {
  15:     "netcoreapp1.0": {
  16:       "imports": "dnxcore50"
  17:     }
  18:   }
  19: }

定义入口程序

启动应用的入口程序定义在Program.cs。如下面的代码片段所示,我们在这个文件中定义了一个Program类型,并在Main方法中编写了启动MVC应用的代码。具体来说,我们创建了一个WebHostBuilder对象通过调用扩展方法UseKestrel为构建的HTTP消息处理管道注册了一个Kestrel服务器。在调用UseStartup方法将Startup设置为启动类型之后,我们调用Build方法创建了一个WebHost对象。我们最终调用Run方法启动WebHost,进而启动了我们的MVC应用。

   1: using Microsoft.AspNetCore.Hosting;
   2: using Microsoft.AspNetCore.Builder;
   3:  
   4: public class Program
   5: {
   6:     public static void Main(string[] args)
   7:     {
   8:         new WebHostBuilder()
   9:         .UseKestrel()
  10:         .UseStartup<Startup>()
  11:         .Build()
  12:         .Run();
  13:     }
  14: }  

定义初始化类型

ASP.NET Core应用启动的时候会先执行一段初始化操作来构建一个完整的HTTP消息处理管道,这些初始化操作定义在Startup.cs。上面调用WebHostBuilder的UseStartup方法指定的类型Startup就定义在这个文件中。如下面的代码片段所示,我们在ConfigureServices方法中注册了与MVC相关的服务,并利用Configure方法将实现MVC框架的中间件注册到消息处理管道中。

   1: using Microsoft.AspNetCore.Builder;
   2: using Microsoft.Extensions.DependencyInjection;
   3:  
   4: public class Startup
   5: {
   6:     public void ConfigureServices(IServiceCollection services)
   7:     {
   8:         services.AddMvc();
   9:     }
  10:  
  11:     public void Configure(IApplicationBuilder app)
  12:     {
  13:         app.UseMvc();
  14:     }
  15: } 

定义Controller

我们在HomeController中定义了MVC应用中唯一的一个Controller,并按照如下的形式定义了一个唯一的Action方法。这个Action方法返回一个简单的字符串“Hello World”,并映射为应用的根地址(“/”)

   1: using Microsoft.AspNetCore.Mvc;
   2: public class HomeController : Controller
   3: {
   4:     [HttpGet("/")]
   5:     public string Index() 
   6:     {
   7:         return "Hello World";          
   8:     }
   9: }

步骤三、运行程序

RC2提供了一个非常强大的命令行(dotnet),包括恢复NuGet包以及编译执行.NET应用的相关操作都可以通过它来完成

恢复NuGet包

我们打开命令行工具并切换到应用所在的目录,执行dotnet restore命令恢复在project.json中使用的NuGet包。

编译执行程序

我们直接执行dotnet build命令对整个应用实施编译,然后执行dotnet run命令启动我们的MVC应用。

向HomeController发起请求

当程序启动后,Kestrel服务器会利用5000端口对HTTP请求实施监听。由于定义在HomeController的Action方法Index被映射为应用根地址,所以我们利用浏览器向该地址发送请求会得到这个Action方法的响应结果。

作者:蒋金楠 

.NET Core 1.0.0 RC2的更多相关文章

  1. win10与ubuntu下演示运行.net core rc2 1.0.0.3002702程序

    随着.net core rc2(1.0.0.002702)发布的同时,我们也来在本地 win10与ubuntu玩一下吧. 先简单说下.net core ,在.net core rc1中用的是dnx 工 ...

  2. .Net Core 1.0.0 RC2安装及示例教程

    前几天微软发布了.Net Core1.0.0 RC2 Preview版本,一直都想尝试下跨平台的.Net Core,一直拖到今天,也参考了下园友们的经验,闲时整理了一下安装的步骤,供大家参考. 我们要 ...

  3. ASP.NET Core 1.1.0 Release Notes

    ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...

  4. Castle Core 4.0.0 alpha001发布

    时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...

  5. ASP.NET Core: You must add a reference to assembly mscorlib, version=4.0.0.0

    ASP.NET Core 引用外部程序包的时候,有时会出现下面的错误: The type 'Object' is defined in an assembly that is not referenc ...

  6. CentOs7 +Jexus 5.8.2部署Asp.Net Core WebApi 1.0生产环境

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...

  7. ASP.NET Core实现OAuth2.0的ResourceOwnerPassword和ClientCredentials模式

    前言 开发授权服务框架一般使用OAuth2.0授权框架,而开发Webapi的授权更应该使用OAuth2.0授权标准,OAuth2.0授权框架文档说明参考:https://tools.ietf.org/ ...

  8. [转]Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac冲突的问题

    Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac冲突的问题 来源:http://www.cnblogs.co ...

  9. Asp.net Core 1.0.1升级到Asp.net Core 1.1.0 Preview版本发布到Windows Server2008 R2 IIS中的各种坑

    Asp.net Core 1.0.1升级到Asp.net Core 1.1.0后,程序无法运行了 解决方案:在project.json中加入runtime节点 "runtimes" ...

随机推荐

  1. Android:Notification的生成与取消

    MainActivity.java: package com.example.notificationdemo; import android.app.Activity; import android ...

  2. 自己用js写的两个日历控件

    前一阵写了两个日历控件,做了简单的封装,发出来共朋友们参考. 第一个日历控件,条状的日历. (使用方法:调用initBarTime(id,evn),第一个参数是要渲染div的id,第二个参数是点击日期 ...

  3. Android 设备管理器 阻止用户取消激活

    该方案测试可行,系统版本4.4.2.它算是借助android系统的一个bug,不确定在后续更高的版本中是否修复. 该功能和360防卸载功能一样的实现原理. 主要的参考资料是:http://bbs.pe ...

  4. PHP函数详细剖析之rtrim函数 By ACReaper

    string rtrim ( string $str [, string $charlist ] ) 这个函数很好理解.r表示右边.trim表示修剪.即右边修剪.默认修剪字符str右边的字符.默认修剪 ...

  5. PHP - 图像处理

    第14章 处理图像 学习要点: 1.创建图像 2.简单小案例 在PHP5中,动态图象的处理要比以前容易得多.PHP5在php.ini文件中包含了GD扩展包,只需去掉GD扩展包的相应注释就可以正常使用了 ...

  6. BZOJ 1179: [Apio2009]Atm( tarjan + 最短路 )

    对于一个强连通分量, 一定是整个走或者不走, 所以tarjan缩点然后跑dijkstra. ------------------------------------------------------ ...

  7. UML02-用例图

    1.泛化表示一般和特殊的关系.用例之间存在泛化关系,参与者之间存在泛化关系,参与者和用例之间存在泛化关系. 2.画出用例图. 系统允许管理员通过磁盘加载存货数据来运行存货清单报告: 管理员通过从磁盘加 ...

  8. 在Qt中如何使用QtDesigner创建的UI文件

    使用Qt有一些时间了,一直在IDE环境(qtcreator和VS2003+集成器)中使用,自然少了很多麻烦的步骤.但是在享受这种便利的同 时,我们也失去了理解更多知识背后的点滴.在IDE中,如果我们要 ...

  9. log4net使用流程

    前面大致介绍了一下log4net的概述和结构.既然都清楚了,下面我来介绍一下如何使用log4net. 使用流程 1.这里所说的使用流程就是使用log4net.dll,首先要根据你的平台来找出对应的版本 ...

  10. 网页内容的html标签补全和过滤的两种方法

    网页内容的html标签补全和过滤的两种方法: 假设你的网页内容的html标签显示不全,有些表格标签不完整而导致页面混乱,或者把你的内容之外的局部html页面给包括进去了,我们能够写个函数方法来补全ht ...