ASP.NET Core 2 学习笔记(六)MVC
ASP.NET Core MVC跟ASP.NET MVC观念是一致的,使用上也没有什么太大的变化。之前的ASP.NET MVC把MVC及Web API的套件分开,但在ASP.NET Core中MVC及Web API用的套件是相同的。
本篇将介绍ASP.NET Core MVC设置方式。
MVC 简介
ASP.NET Core的MVC(Model-View-Controller)架构模式延续ASP.NET MVC,把网站分成三大元件Model、View及Controller,依赖关系如下图:

- Model
负责数据处理,包含数据存取、业务逻辑、定义数据对象及验证数据。 - View
负责UI显示,如HTML、CSS等界面设计配置。 - Controller
负责将使用者Requset找到相对应的Model及View,做为控制流程的角色。
在ASP.NET Core中使用MVC或Web API,需要
Microsoft.AspNetCore.Mvc套件。
注册MVC 服务
在Startup.cs的ConfigureServices加入MVC的服务,并在Configure对IApplicationBuilder使用UseMvcWithDefaultRoute方法注册MVC预设路由的Middleware。如下:
Startup.cs
// ...
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
} public void Configure(IApplicationBuilder app)
{
app.UseMvcWithDefaultRoute();
}
}
- UseMvcWithDefaultRoute
这个是ASP.NET Core的预设路由,会将Request来的URL找到对应的Controller及Action。
MVC 示例
Model
建立一个简单的Model 用于Controller 跟View 互动。
Models\UserModel.cs
namespace MyWebsite.Models
{
public class UserModel
{
// 名称
public string Name { get; set; } = "SnailDev";
}
}
Controller
在项目目录下建立一个Controllers文件夹,把Controller都放这个目录。
过去ASP.NET把MVC及Web API用的Controller分为Controller及ApiController,现在ASP.NET Core把两者合一,不再区分ApiController。
所以要建立一个类,名称后缀Controller即可,如下:
Controllers\HomeController.cs
namespace MyWebsite.Controllers
{
public class HomeController
{
public string Index()
{
return "this is homecontroller index action";
}
}
}
但要让Controller跟View互动,还是需要继承Controller比较方便,如下:
Controllers\HomeController.cs
using Microsoft.AspNetCore.Mvc;
using MyWebsite.Models; namespace MyWebsite.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
var user = new UserModel();
return View(model: user);
}
}
}
IActionResult回传的方式可以有很多种,通过继承Controller后,就可以使用Controller的方法:
- View
以上例来说,通过回传View方法,可以找到该Controller & Action对应的*.cshtml,并且把UserModel传给View使用。 - HTTP Status Code
响应包含HTTP Status。常用的响应有Ok、BadRequest、NotFound等。
例如:return BadRequest("Internal Server Error"),会响应HTTP Status 400及Internal Server Error字串。 - Redirect
可以把Request转给其他的Action或URL。转向的方法有Redirect、LocalRedirect、RedirectToAction、RedirectToRoute等。
例如:return RedirectToAction("Login", "Authentication"),就会把Request转向到AuthenticationController的Login()。 - Formatted Response
响应时指定Content-Type。Web API的回传通常都用这种方式,序列化对象顺便标注Content-Type。
例如:return Json(user),会将对象序列化成JSON字串,并在HTTP Headers带上Content-Type=application/json。
View
View跟Controller有相互的对应关系,预设在Controller使用View方法回传结果,会从以下目录寻找对应的*.cshtml:
- Views\{ControllerName}\{ActionName}.cshtml
寻找与Controller同名的子目录,再找到与Action同名的*.cshtml。
如上例HomeController.Index(),就会找项目目录下的Views\Home\Index.cshtml文件。 - Views\Shared\{ActionName}.cshtml
如果Controller同名的子目录,找不到Action同名的*.cshtml。就会到Shared目录找。如上例HomeController.Index(),就会找项目目录下的Views\Shared\Index.cshtml文件。
Views\Home\Index.cshtml
@model MyWebsite.Models.UserModel Hello~ 我是 @Model.Name
在*.cshtml用@model绑定Model的型别,才可以使用@Model取得Controller传入的对象。
示例结果

数据流动图如下:

参考
Overview of ASP.NET Core MVC
ASP.NET Core - Setup MVC
老司机发车啦:https://github.com/SnailDev/SnailDev.NETCore2Learning
ASP.NET Core 2 学习笔记(六)MVC的更多相关文章
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
sql server 关于表中只增标识问题 由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...
- ASP.NET Core 2 学习笔记(七)路由
ASP.NET Core通过路由(Routing)设定,将定义的URL规则找到相对应行为:当使用者Request的URL满足特定规则条件时,则自动对应到相符合的行为处理.从ASP.NET就已经存在的架 ...
- ASP.NET Core 2 学习笔记(十二)REST-Like API
Restful几乎已算是API设计的标准,通过HTTP Method区分新增(Create).查询(Read).修改(Update)和删除(Delete),简称CRUD四种数据存取方式,简约又直接的风 ...
- ASP.NET Core 2 学习笔记(十)视图
ASP.NET Core MVC中的Views是负责网页显示,将数据一并渲染至UI包含HTML.CSS等.并能痛过Razor语法在*.cshtml中写渲染画面的程序逻辑.本篇将介绍ASP.NET Co ...
- Asp.Net Core WebApi学习笔记(四)-- Middleware
Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...
- ASP.NET Core 2 学习笔记(十三)Swagger
Swagger也算是行之有年的API文件生成器,只要在API上使用C#的<summary />文件注解标签,就可以产生精美的线上文件,并且对RESTful API有良好的支持.不仅支持生成 ...
- ASP.NET Core 2 学习笔记(一)开始
原文:ASP.NET Core 2 学习笔记(一)开始 来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽然名称沿用ASP.NET, ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(六)-- 依赖注入
本篇将介绍Asp.Net Core中一个非常重要的特性:依赖注入,并展示其简单用法. 第一部分.概念介绍 Dependency Injection:又称依赖注入,简称DI.在以前的开发方式中,层与层之 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)
本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另一种是发布到IIS托管运 ...
随机推荐
- 二叉树中的最大路径和 · Binary Tree Maximum Path Sum
[抄题]: 给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和) [思维问题]: 不会写分合法 [一句话思路]: 用两次分治:ro ...
- runloop与线程的关系
- js-移动端android浏览器中input框被软键盘遮住的问题解决方案
我遇到的问题:在一个页面里有一个弹出层之前我给我的最外层加了固定定位 用了下面的方法也不好使:没有办法我将之改为绝对定位层级变高在加上一个顶部标签通过js计算顶部高度来实现满屏遮挡: <sect ...
- process_进程池_2
import multiprocessingimport os, time, random def Lee(): print("\nRun task Lee-%s" %(os.ge ...
- apicloud代码压缩和全局加密
首先说代码压缩,因为没什么用,就先说它了.代码压缩后,apicloud里面的css和js文件里面的空格呀回车呀都去掉了,就是文件小了,所有代码显示为一行了.这些代码的变量没有重命名,我们知道jquer ...
- shiro + struts2 在action 中使用 shiro 注解 @requiresPermissions 报错: 方法找不到,类初始失败
06:36:34,405 ERROR http-8084-2 dispatcher.Dispatcher:38 - Exception occurred during processing reque ...
- 2018上IEC计算机高级语言(C)作业 第2次作业
2018上IEC计算机高级语言(C)作业 第2次作业 一.例程调试(20分) 调试下面1个例程,各位同学调试用自己的学号模4加1序号的题,写清错误提示(截小图)及修改内容(10分); 说明:有可能没有 ...
- 2018.07.12 atcoder Go Home(贪心)
传送门 题意简述:大家在数轴上生活,公司在 s. 班车送所有人回家,有 n 个住处,第 i 个位置在 xi,居住了 pi 的人. 保证 xi 互不相同. 大家⼀起投票向前还是向后,如果票数相同就固定向 ...
- SQL查询优化的一些建议
使用批量查询,而不是N次循环查询! 重复的数据,不要重复获取: 根据需要,按需要获取表字段,而不是SELECT *: 针对频繁的搜索字段,建立必要的索引,以加快查询速度: 使用关联查询,而不是粗暴地类 ...
- docker入门实战
基本概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上. Docker是一个重新定义了程序开发测试.交付和 ...