.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方法的响应结果。

.NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序的更多相关文章
- Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core
第一部分:本教程介绍如何在 IIS 服务器上托管 ASP.NET Core 应用. 官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutori ...
- 【翻译】在Mac上使用VSCode创建你的第一个Asp.Net Core应用
Setting Up Your Development Environment 设置你的开发环境 To setup your development machine download and inst ...
- Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群
Kubernetes简介 Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的 ...
- 使用Visual Studio Code创建第一个ASP.NET Core应用程序
全文翻译自:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 这篇文章将向你展示如何在Mac上写出你的第一个A ...
- ASP.NET Core 中文文档 第二章 指南(4.1)ASP.NET Core MVC 与 Visual Studio 入门
原文:Getting started with ASP.NET Core MVC and Visual Studio 作者:Rick Anderson 翻译:娄宇(Lyrics) 校对:刘怡(Alex ...
- 如何一秒钟从头构建一个 ASP.NET Core 中间件
前言 其实地上本没有路,走的人多了,也便成了路. -- 鲁迅 就像上面鲁迅说的那样,其实在我们开发中间件的过程中,微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序, 但是其中却存在者一些最 ...
- .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了
作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...
- 从零写一个Asp.net core手脚架(模型验证)
一个asp.net core项目,一定包含了各种的实体,在RESTful api里面,有很多的参数传递,不建立实体则大量的参数需要自定验证正确性,并且Action上面会写的密密麻麻的参数 在asp.n ...
- 用VSCode开发一个asp.net core 2.0+angular 5项目(4): Angular5全局错误处理
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...
随机推荐
- 前端框架 EasyUI (0) 重新温习(序言)
几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...
- 前端学HTTP之日志记录
前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...
- 通过三次优化,我将gif加载优化了16.9%
WeTest 导读 现在app越来越炫,动不动就搞点动画,复杂的动画用原生实现起来挺复杂,如是就搞起gif播放动画的形式,节省开发成本. 背 景 设计同学准备给一个png序列,开发读取png序列, ...
- android键盘
在应用的开发过程中有不少的情况下会用到自定义键盘,例如支付宝的支付密码的输入,以及类似的场景.android系统给开发者们提供了系统键盘,KeyboardView,其实并不复杂,只是有些开发者不知道罢 ...
- 利用Node.js的Net模块实现一个命令行多人聊天室
1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...
- 用javascript 写个函数返回一个页面里共使用了多少种HTML 标签
今天我无意间看到一个面试题: 如何用javascript 写个函数返回一个页面里共使用了多少种HTML 标签? 不知你看到 是否蒙B了,如果是我 面试,肯定脑子嗡嗡的响.... 网上搜了搜也没有找到答 ...
- web api接口同步和异步的问题
一般来说,如果一个api 接口带上Task和 async 一般就算得上是异步api接口了. 如果我想使用异步api接口,一般的动机是我在我的方法里面可能使用Task.Run 进行异步的去处理一个耗时的 ...
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- jquery学习(一)
简单的jquery学习,首先在页面引入jquery <!-- 引入jquery --> <script src="js/jquery-1.8.3.js" type ...
- JavaScript学习笔记(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...