第二章指南(4.2)添加 Controller
原文:Adding a controller
翻譯:婁宇(Lyrics)
校對:劉怡(AlexLEWIS)、何鎮汐、夏申斌、孟帥洋(書緣)
Model-View-Controller (MVC) 架構模式將一個應用程序分離成三個主要的組件:?Model、View 以及Controller 。 MVC 模式幫助你創建可測試的應用程序,比傳統的單塊應用程序更加容易維護和更新。基于 MVC 的應用程序包含:
Models:應用程序中用來表示數據的類,并使用驗證邏輯來執行該數據業務規則。通常,模型(Model)對象從數據庫查詢和存儲 Model 狀態。在本教程?Movie?模型(Model)從數據庫查詢電影數據用來顯示或更新。更新后的數據寫入 SQL Server 數據庫。
Views:視圖是顯示用戶界面(UI)的組件。通常,UI 用于顯示模型(Model)數據。
Controllers:一種類(Class),用于處理瀏覽器請求,查詢模型(Model)數據,以及將指定視圖模板作為響應返回給瀏覽器。在 MVC 應用程序中,視圖(View)僅僅顯示信息; 控制器(Controller)處理和響應用戶的輸入和交互。例如, 控制器(Controller)處理路由數據和查詢字符串值,然后將這些值傳遞給模型(Model),模型(Model)可以使用這些值去查詢數據庫。
MVC 模式幫助你創建一個分離不同方面的應用程序(輸入邏輯,業務邏輯,以及 UI 邏輯),同時這些元素之間是松耦合的。該模式指定在應用程序中的每一種邏輯應該位于何處。 UI 邏輯屬于視圖(View)。輸入邏輯屬于控制器(Controller)。業務邏輯屬于模型(Model)。當你構建一個應用程序時,這樣的分離幫助你管理應用程序的復雜性,因為它使你編寫一個方面的代碼時不會影響其他(方面)的代碼。比如,你可以編寫視圖(View)代碼而不需要依賴于業務邏輯代碼。
我們會在本系列教程中涵蓋所有這些概念,并告訴你如何使用它們構建一個簡單的電影應用程序。下面的圖片展示了 MVC 項目中的?Models?、?Views?以及?Controllers?文件夾。
在?解決方案資源管理器(Solution Explorer)?中,鼠標右鍵點擊?Controllers > 添加(Add) > 控制器(Controller)
在?添加基架(Add Scaffold)?對話框中
點擊?MVC Controller - Empty
點擊?添加(Add)
命名控制器(Controller)為?HelloWorldController
點擊?添加(Add)
用下面的代碼替換?Controllers/HelloWorldController.cs?中的內容:
using Microsoft.AspNetCore.Mvc;using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{ ? ?
public class HelloWorldController : Controller{ ? ? ?
? ? ? ?// GET: /HelloWorld/public string Index() ? ? ? ?{ ? ? ? ?
? ? ? ?? ?return "This is my default action...";} ? ? ?
? ? ? ?? ?// GET: /HelloWorld/Welcome/ public string Welcome() ? ? ? ?{ ? ? ?
? ? ? ?? ? ? ? ?return "This is the Welcome action method...";}} }
控制器(Controller)的每個?public?方法都可作為 HTTP 端點。在上面的例子中,兩個方法都返回 string,注意它們的注釋:
public class HelloWorldController : Controller{ ? ?// // GET: /HelloWorld/ ?(手動高亮)public string Index() ? ?{ ? ? ? ?return "This is my default action...";} ? ?// // GET: /HelloWorld/Welcome/ ?(手動高亮)public string Welcome() ? ?{ ? ? ? ?return "This is the Welcome action method...";} }第一條注釋指出這是一個通過在 URL 后添加 "/HelloWorld/" 調用的?HTTP GET?方法。第二條指出這是一個通過在 URL 后添加 "/HelloWorld/Welcome/" 調用的?HTTP GET?方法。之后的教程我們將使用基架引擎來生成?HTTP POST?方法。
使用非調試模式(Ctrl+F5)運行應用程序,并在瀏覽器地址欄路徑后添加 "HelloWorld" (在下面的圖片中,使用了?http://localhost:1234/HelloWorld?,但是你必須用你的應用程序端口替換?1234?)。?Index 方法返回一段字符串,系統將這段字符串轉換為 HTML 返回給瀏覽器。
MVC 調用的控制器(Controller)類 (以及它們的 Action 方法) 取決于傳入的 URL 。MVC 的默認路由邏輯采用類似下面規則格式來決定代碼的調用:
/[Controller]/[ActionName]/[Parameters]
你可以在?Startup.cs?文件中設置路由規則。
app.UseMvc(routes => {routes.MapRoute( ? ? ? ?name: "default", ? ? ?? ? ? ?template: "{controller=Home}/{action=Index}/{id?}"); ?
//(手動高亮)});
當你運行應用程序且不提供任何 URL 段時,它將默認訪問在上面模板中高亮行指定的 "Home" Controller 中的 "Index" Action 方法。
第一個 URL 段決定運行哪個控制器(Controller)。所以?localhost:xxxx/HelloWorld?映射到?HelloWorldController?類。URL 段的第二部分決定類里的 Action 方法。所以?localhost:xxxx/HelloWorld/Index?將運行?HelloWorldController?中的?Index?方法。請注意,我們只需要瀏覽?localhost:xxxx/HelloWorld,默認會調用?Index?方法。這是因為在沒有指定方法名時,?Index是默認方法。URL 段的第三部分 (?Parameters) 是路由數據。我們之后將在本教程中了解路由數據。
瀏覽?http://localhost:xxxx/HelloWorld/Welcome?。?Welcome?方法運行并返回 "This is the Welcome action method..." 。默認的 MVC 路由是?/[Controller]/[ActionName]/[Parameters]?。對于這個 URL , 控制器(Controller)是?HelloWorld?, Action 方法是?Welcome?。我們還沒有使用 URL 中的?[Parameters]?部分。
讓我們稍微修改一下例子,使我們能夠通過 URL 傳遞一些參數信息到控制器(Controller)(例如,?/HelloWorld/Welcome?name=Scott&numtimes=4?)。如下所示修改?Welcome?方法使其包含兩個參數。請注意,代碼利用 C# 的可選參數特性指明,在沒有傳遞參數的情況下,?numTimes?參數默認為1。
public string Welcome(string name, int numTimes = 1){ ??return HtmlEncoder.Default.Encode( ? ? ? ?"Hello " + name + ", NumTimes is: " + numTimes); }
警告
上面的代碼使用?HtmlEncoder.Default.Encode?來保護應用程序免受惡意輸入(即 JavaScript)。
警告
在 Visual Studio 2015 中,當你以非調試模式 (Ctl+F5) 運行,你不需要在修改代碼后生成應用程序。只需要保存文件,刷新你的瀏覽器就可以看到改變。
運行你的應用程序并瀏覽:
http://localhost:xxxx/HelloWorld/Welcome?name=Rick&numtimes=4
(用你的端口替換 xxxx。) 你可以在 URL 中對?name?和?numtimes?嘗試不同的值。 模型綁定系統自動將地址欄里查詢字符串中有名字的參數映射到你方法中的參數。查看 :doc:/mvc/models/model-binding?獲得更多的信息。
在上面的示例中, URL 段 (Parameters) 沒有被使用,?name?和?numTimes?參數作為?查詢字符串?被傳遞。 上面 URL 中的???(問號) 是一個分隔符,后面跟查詢字符串。?&?字符分割查詢字符串。
用下面的代碼替換?Welcome?方法:
public string Welcome(string name, int ID = 1){ ? ?return HtmlEncoder.Default.Encode( ? ? ? ?"Hello " + name + ", ID: " + ID); }運行應用程序然后輸入 URL :?http://localhost:xxx/HelloWorld/Welcome/3?name=Rick
這次第三個 URL 段匹配上路由參數?id?。?Welcome?方法包含一個與?MapRoute?內的 URL 模板相匹配的?id?參數。跟隨的???(id?) 表示?id?參數是可選的。
app.UseMvc(routes => {routes.MapRoute( ? ? ? ?name: "default", ? ? ? ?template: "{controller=Home}/{action=Index}/{id?}"); ?//(手動高亮)});在這些例子中,控制器(Controller)一直在做 MVC 中的 "VC" 部分,就是視圖(View)和控制器(Controller)部分的工作。這個控制器(Controller)直接返回 HTML 。一般來說你不想讓控制器(Controller) 直接返回 HTML ,因為這讓編碼和維護變得非常麻煩。所以,我們通常會使用一個單獨的 Razor 視圖模板文件來幫助生成 HTML 響應。 我們將在下一個教程中介紹這部分。
由于水平有限,錯漏之處在所難免,歡迎大家批評指正,不勝感激,我們將及時修正。
dotNet Core Studying Group:436035237
相關文章:
ASP.NET Core 1.0 入門——了解一個空項目
ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
.NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0簡介
云服務器下ASP.NET Core 1.0環境搭建(包含mono與coreclr)
使用VS Code開發ASP.NET Core 應用程序
dotnet run是如何啟動asp.net core站點的
ASP.NET Core提供模塊化Middleware組件
“dotnet restore"和"dotnet run"都做了些什么?
探秘 dotnet run 如何運行 .NET Core 應用程序
.NET Portability Analyzer 已開源
ASP.NET Core的配置(1):讀取配置信息
ASP.NET Core的配置(2):配置模型詳解
.NET Core 1.0 RC2 歷險之旅
使用VS Code開發 調試.NET Core 應用程序
讓我們Core在一起:ASP.NET Core & .NET Core
.NET Core VS Code 環境配置
官方博客明確了 .NET Core RC2/RTM 時間表
.NET Core全新的配置管理[共9篇]
利用記事本創建一個ASP.NET Core RC2 MVC應用
微軟.NET 正式劈腿成功,橫跨所有平臺
.NET Core 1.0 CentOS7 嘗試
解讀發布:.NET Core RC2 and .NET Core SDK Preview 1
[.NET Core].NET Core R2安裝及示例教程
ASP.NET Core 開發-中間件(Middleware)
結合Jexus + Kestrel 部署 asp.net core 生產環境
通過Jexus 部署 dotnetcore版本MusicStore 示例程序
ASP.NET Core 中文文檔 第一章 入門
用 Visual Studio Code 在 macOS 上創建首個 ASP.NET Core 應用程序
用 Visual Studio 和 ASP.NET Core MVC 創建首個 Web API
用 Visual Studio 發布一個 Azure 云 Web 應用程序
ASP.NET Core MVC 與 Visual Studio 入門
原文地址:http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-2_4_2-adding-controller.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
贊賞
人贊賞
總結
以上是生活随笔為你收集整理的第二章指南(4.2)添加 Controller的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 厚积薄发,拥抱 .NET 2016
- 下一篇: DotNet Core 介绍