1. 程式人生 > >ASP.NET Core 2 學習筆記(六)MVC

ASP.NET Core 2 學習筆記(六)MVC

方便 web redirect AR return his 架構模式 PE ofo

原文: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

ASP.NET Core 2 學習筆記(六)MVC