ASP.NET Core 2 学习笔记(六)MVC

简介: 原文: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 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,把网站分成三大元件ModelViewController,依赖关系如下图:

  • Model
    负责数据处理,包含数据存取、业务逻辑、定义数据对象及验证数据。
  • View
    负责UI显示,如HTML、CSS等界面设计配置。
  • Controller
    负责将使用者Requset找到相对应的Model及View,做为控制流程的角色。

在ASP.NET Core中使用MVC或Web API,需要Microsoft.AspNetCore.Mvc套件。

注册MVC 服务

Startup.csConfigureServices加入MVC的服务,并在ConfigureIApplicationBuilder使用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分为ControllerApiController,现在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。常用的响应有OkBadRequestNotFound等。
    例如:return BadRequest("Internal Server Error"),会响应HTTP Status 400及Internal Server Error字串。
  • Redirect
    可以把Request转给其他的Action或URL。转向的方法有RedirectLocalRedirectRedirectToActionRedirectToRoute等。
    例如: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

  1. Views\{ControllerName}\{ActionName}.cshtml
    寻找与Controller同名的子目录,再找到与Action同名的*.cshtml
    如上例HomeController.Index(),就会找项目目录下的Views\Home\Index.cshtml文件。
  2. 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

目录
相关文章
|
8天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
8天前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
26 3
|
1月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
28 7
|
1月前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
28天前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
39 0
|
2月前
|
开发框架 监控 .NET
开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
36 0
|
2月前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
2月前
|
Linux C# C++
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
37 0
|
2月前
|
开发框架 .NET API
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
下一篇
无影云桌面