一、前言

1、本文主要内容

  • 使用dotnet cli创建基于解决方案(sln+csproj)的项目
  • 使用Visual Studio Code开发基于解决方案(sln+csproj)的项目
  • Visual Studio Code Solution插件( vscode-solution-explorer)基础使用介绍
  • 基于 .NET Core web项目模板构建 ASP.NET Core MVC Web应用
  • ASP.NET Core MVC框架上手

2、本教程环境信息

软件/环境 说明
操作系统 Windows 10
SDK 2.1.401
ASP.NET Core 2.1.3
IDE Visual Studio Code 1.27
浏览器 Chrome 69

3、前置知识

你可能需要的前置知识

  • MVC框架/模式介绍

https://baike.baidu.com/item/mvc

  • 控制反转(IOC)原则与依赖注入(DI)

ASP.NET Core 默认集成了DI。所有官方模块的引入都要使用DI的方式引入。

https://baike.baidu.com/item/IOC

二、项目准备

1、项目创建

.NET平台的项目构建有两个概念:解决方案(Solution)、项目(Project)。
所有的项目开发,不论是Web项目,还是控制台应用程序,都必须基于Project来构建。而Solution的作用就是把Project组织起来

如果项目简单,我们只需要基于Project来构建项目即可,但是当项目需要分层解耦时,我们如果在Project创建目录来隔离并不能起到硬性隔离的作用,毕竟只要在一个Project中就可以引用。而通过Project来分层就可以做到硬性隔离的效果。而且基于Project的代码复用更简洁合理(编译产出.dll可以在其他项目中引用等)

解决方案(Solution)+ 项目(Project)就相当于用Maven构建的Java项目中,顶层Project和Project的关系。

  • 创建项目目录
#创建项目目录
mkdir Ken.Tutorial #进入项目目录
cd Ken.Tutorial
  • 创建解决方案文件
dotnet new sln -n Ken.Tutorial
  • 创建Web项目
dotnet new web -n Ken.Tutorial.Web
  • 将项目添加到解决方案中
dotnet sln add Ken.Tutorial.Web

2、VS Code 配置

  • 安装基于Solution开发 .NET Core 项目的扩展
扩展名 说明
vscode-solution-explorer 创建、删除、重命名或移动解决方案、解决方案文件夹和项目。管理项目引用。

VS Code 扩展管理页直接搜索扩展名安装即可,本次安装的版本是:0.2.33

三、VS Code开发基于解决方案的项目说明

1、VS Code项目配置

菜单:文件->打开文件夹,选择项目目录打开项目

因为已经安装了VS Code的C#扩展和Solution扩展,所以也会提示缺失相关配置

C#扩展提示:

Required assets to build and debug are missing from ‘helloweb’. Add them?

这是因为项目缺少编译、调试配置,选择Yes即可

vscode-solution-explorer扩展提示:

Would you like to create the vscode-solution-explorer templates folder?

这是因为vscode-solution-explorer插件需要项目中的解决方案提供相应的模板。

所有插件默认的配置文件,都会放在.vscode文件夹中

资源管理器中除了默认的面板,我们安装的Solution插件还会提供友好的Solution Explorer。这个视图的风格,有VS(Visual Studio)的既视感。
后续项目开发完全可以隐藏默认资源管理器,使用Solution Explorer就好。

2、Solution Explorer菜单介绍

  • Solution鼠标右键菜单介绍

菜单 快捷键 说明
Add existing project / 添加已存在的项目(Project)
Add new project / 新建项目(Project)
Create folder Ctrl+Shift+F 创建文件夹
Open File / 打开解决方案文件(.sln)
Rename F2 修改解决方案名称
Build / 编译解决方案(Solution)
Clean / 清理解决方案(Solution)的编译输出
Pack / 解决方案(Solution)打包
Publish / 发布解决方案(Solution)
Restore / 恢复解决方案(Solution)
Test / 执行解决方案(Solution)中的单元测试
  • Project鼠标右键菜单介绍

菜单 快捷键 说明
Add package / 添加package
Add reference / 引用解决方案中的其他项目
Create file Ctrl+Shift+A 创建文件
Create folder Ctrl+Shift+F 创建文件夹
Move / 移动项目(Project)
Remove project from solution Del 从解决方案中移除项目(Project)
Paste Ctrl+V 粘贴
Open File / 打开项目文件(.csproj)
Rename F2 修改解决方案名称
Build / 编译项目(Project)
Clean / 清理项目(Project)的编译输出
Pack / 项目(Project)打包
Publish / 发布项目(Project)
Restore / 恢复项目(Project)
Test / 执行项目(Project)中的单元测试

四、ASP.NET Core MVC 输出HelloWorld

1、引入 ASP.NET Core MVC

修改应用启动类(Startup.cs),引入MVC模块并配置默认路由

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//引入MVC模块
services.AddMvc();
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseMvc(routes =>
{
//配置默认路由
routes.MapRoute(
name: "Default",
template: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
});
}
}

2、创建Controller与Action

  • 创建HomeController

在Ken.Tutorial.Web项目中添加文件夹:Controllers,并在文件夹中创建类HomeController类型选择为:class

using System;

namespace Ken.Tutorial.Web.Controllers
{
public class HomeController
{
}
}
  • 引用MVC命名空间,并继承与Controller
using System;
using Microsoft.AspNetCore.Mvc; namespace Ken.Tutorial.Web.Controllers
{
public class HomeController : Controller
{
}
}

ControllerName=Home

  • 定义Action:Index
using System;
using Microsoft.AspNetCore.Mvc; namespace Ken.Tutorial.Web.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
return Content("Hello World!");
}
}
}

ActionName=Index

3、项目启动与访问测试

  • 修改协议与端口

修改Ken.Tutorial.Web项目Properties文件夹中launchSettings.json文件,使用HTTP协议并监听端口5001

"Ken.Tutorial.Web": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
  • 启动项目

按下F5启动项目,项目启动成功后,VS Code会帮我们打开默认浏览器并访问:http://localhost:5001

之所以显示HomeController中Index(Action)的返回内容,是因为我们前面定义了默认路由可以从{controller}/{action}访问路径对应Action,而我们又定义了默认值:
controller = "Home", action = "Index"

routes.MapRoute(
name: "Default",
template: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);

我们也可以通过http://localhost:5001/home/index显示访问

五、ASP.NET Core 视图基础使用

1、创建返回View的Action

HomeController添加Action:Time

public IActionResult Time()
{
//将当前服务器时间放入ViewBag中
ViewBag.ServerTime = DateTime.Now;
return View("Time");
}

2、创建视图文件

在项目中创建文件夹 Views,并创建对应的HomeController视图子文件夹:Home
之所以这样创建文件夹,是因为当我们返回视图时,只指定ViewName,而不指定完整的路径。ASP.NET Core MVC框架会默认在以下项目目录中依次读取视图文件:

  • /Views/{ControllerName}
  • /Views/Shared
  • /Pages/Shared

如果找到视图文件便会渲染视图,如果没找到便会抛出异常。

创建视图文件 /Views/Home/Time.cshtml

@ViewBag.ServerTime  -ken.io

视图渲染时@ ViewBag.ServerTime会输出Action中赋值的内容,
-ken.io会被作为字符串渲染

3、启动项目测试

按下F5启动项目,项目启动成功后在浏览器中输入http://localhost:5001/home/time并访问,将会看到以下输出:

六、备注

1、附录

  • 本文代码示例

https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02


本文首发于我的独立博客:https://ken.io/note/asp.net-core-tutorial-mvc-quickstart

ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用的更多相关文章

  1. ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门

    一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...

  2. ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门

    一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...

  3. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC 集成 EF Core 介绍&操作步骤 ASP.NET Core MVC 使用 EF Core + Linq to Entity ...

  4. ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Raz ...

  5. ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...

  6. ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC 视图引擎(Razor)简介 ASP.NET Core MVC 视图(Razor)ViewData使用示例 ASP.NET Core MV ...

  7. ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET C ...

  8. ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门

    一.前言 1.本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NE ...

  9. ASP.NET Core 入门笔记3,使用ASP.NET Core MVC框架构建Web应用

    一.ASP.NET Core MVC 输出Hello World,Friend! 1.引入 ASP.NET Core MVC 修改应用启动类(Startup.cs),引入MVC模块并配置默认路由 pu ...

随机推荐

  1. [Swift]LeetCode229. 求众数 II | Majority Element II

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. Note: The a ...

  2. [Swift]LeetCode897. 递增顺序查找树 | Increasing Order Search Tree

    Given a tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root o ...

  3. [Swift]LeetCode926. 将字符串翻转到单调递增 | Flip String to Monotone Increasing

    A string of '0's and '1's is monotone increasing if it consists of some number of '0's (possibly 0), ...

  4. CoCos2dx开发:tile地图绘制和Tiled工具的基本使用

    1.新建地图: 在Tiled工具里新建文件: 设置地图的地图大小和地图块大小: 新建好的空文件如下: 2.绘制图块: 在Aseprite中建立相应大小(注意:划分的图块为32*32,因此图片大小最好与 ...

  5. [Abp 源码分析]十五、自动审计记录

    0.简介 Abp 框架为我们自带了审计日志功能,审计日志可以方便地查看每次请求接口所耗的时间,能够帮助我们快速定位到某些性能有问题的接口.除此之外,审计日志信息还包含有每次调用接口时客户端请求的参数信 ...

  6. 汉诺塔问题其实很简单 Python 递归经典面试题

    话不多说,上代码 1 def hanoi_move(n, source, dest, intermediate): 2 if n >= 1: # 递归出口,只剩一个盘子 3 hanoi_move ...

  7. Python爬虫入门教程 24-100 微医挂号网医生数据抓取

    1. 写在前面 今天要抓取的一个网站叫做微医网站,地址为 https://www.guahao.com ,我们将通过python3爬虫抓取这个网址,然后数据存储到CSV里面,为后面的一些分析类的教程做 ...

  8. C++版 - 剑指offer面试题28: 字符串的排列

    题目: 字符串的排列 热度指数:5777 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出 ...

  9. Netty 简介

    上文我们介绍了NIO和BIO的区别,NIO相对于BIO是一次很大的进步.但我们平时开发中并不会使用NIO.这是因为NIO在开发中存在以下问题 NIO的类库和API繁杂,使用麻烦,需要熟练掌握Selec ...

  10. 简单的了解一下AQS吧

    什么是AQS AQS,即AbstractQueuedSynchronizer,是一套定义了多线程访问共享资源的同步器框架.在JDK的并发包中很多类都是基于AQS进行实现的,比如ReentrantLoc ...