.NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序

在.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.config

我们在NuGet.config文件中定义应用程序使用的NuGet包所在的站点地址(https://www.myget.org/F/aspnetrc2/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/aspnetrc2/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方法的响应结果。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Debian 和Ubuntu Mono 3.0 部署包

Mono 3.0 刚发布,Debian 的Mono打包工作也开始了, 这篇博客《Mono 3.0 Preview Packages for Debian and...

21670
来自专栏葡萄城控件技术团队

WPF的消息机制(一)- 让应用程序动起来

前言 谈起“消息机制”这个词,我们都会想到Windows的消息机制,系统将键盘鼠标的行为包装成一个Windows Message,然后系统主动将这些Window...

20290
来自专栏图形学与OpenGL

实验一 GDI生成像素点

1. 打开VC,新建MFC工程: 从开始->所有程序->Microsoft Visual C++ 6.0菜单中打开VC,也可单...

19810
来自专栏林德熙的博客

从以前的项目格式迁移到 VS2017 新项目格式 必须删除必须修改添加文件项目引用引用包删除多余文件输入注释多个框架使用条件判断迁移 WPF 项目

以前的项目格式使用的是 csproj 的格式,但是 .net core 支持使用 project.json 格式的项目文件,后来还是决定不使用这个格式。 VS2...

89620
来自专栏令仔很忙

手把手教你----使用Nuget管理自己的项目库

官网上的解释:NuGet is the package manager for the Microsoft development platform in...

17510
来自专栏跟着阿笨一起玩NET

Winform登录窗体登录仿asp.net验证成功后进入主界面

一、登录界面验证成功后进入主界面,否则则退出应用程序。 假设登录窗体frmLogin.cs和主界面frmMain.cs在程序的Main入口这样来实现:

21610
来自专栏葡萄城控件技术团队

ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中。你可能会问一个问题,如何指定它将连接到数据库? 实际上,...

37180
来自专栏cnblogs

这样入门asp.net core 之 静态文件

本文章主要说明asp.net core中静态资源处理方案: 一、静态文件服务 首先明确contentRoot和webroot这两个概念 contentRoot:...

32950
来自专栏林德熙的博客

dotnet core 添加 SublimeText 编译插件

因为 SublimeText 有很多插件都是使用 Py 写的,而我想使用 dotnet core 给 SublimeText 写一个编译插件,也就是在我使用 M...

16730
来自专栏有困难要上,没有困难创造困难也要上!

Pyinstaller ERROR: Assembly amd64_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none not found

48480

扫码关注云+社区

领取腾讯云代金券