ASP.NET Core MVC跟ASP.NET MVC觀念是一致的,使用上也沒有什麼太大的變化。以前的ASP.NET MVC把MVC及Web API的套件分開,但在ASP.NET Core中MVC及Web API用的套件是相同的。html
本篇將介紹ASP.NET Core MVC設置方式。git
ASP.NET Core的MVC(Model-View-Controller)架構模式延續ASP.NET MVC,把網站分紅三大元件Model、View及Controller,依賴關係以下圖:github
在ASP.NET Core中使用MVC或Web API,須要
Microsoft.AspNetCore.Mvc
套件。json
在Startup.cs的ConfigureServices
加入MVC的服務,並在Configure
對IApplicationBuilder
使用UseMvcWithDefaultRoute
方法註冊MVC預設路由的Middleware。以下:架構
Startup.csmvc
// ...
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseMvcWithDefaultRoute();
}
}
這個是ASP.NET Core的預設路由,會將Request來的URL找到對應的Controller及Action。app
創建一個簡單的Model 用於Controller 跟View 互動。asp.net
Models\UserModel.cs網站
namespace MyWebsite.Models
{
public class UserModel
{
// 名稱
public string Name { get; set; } = "SnailDev";
}
}
在項目目錄下創建一個Controllers文件夾,把Controller都放這個目錄。
過去ASP.NET把MVC及Web API用的Controller分爲Controller
及ApiController
,如今ASP.NET Core把二者合一,再也不區分ApiController
。
因此要創建一個類,名稱後綴Controller便可,以下:ui
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
方法,能夠找到該Controller & Action對應的*.cshtml
,而且把UserModel傳給View使用。Ok
、BadRequest
、NotFound
等。return BadRequest("Internal Server Error")
,會響應HTTP Status 400及Internal Server Error字串。Redirect
、LocalRedirect
、RedirectToAction
、RedirectToRoute
等。return RedirectToAction("Login", "Authentication")
,就會把Request轉向到AuthenticationController的Login()。return Json(user)
,會將對象序列化成JSON字串,並在HTTP Headers帶上Content-Type=application/json。View跟Controller有相互的對應關係,預設在Controller使用View
方法回傳結果,會從如下目錄尋找對應的*.cshtml
:
*.cshtml
。HomeController.Index()
,就會找項目目錄下的Views\Home\Index.cshtml
文件。*.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