本文共 3009 字,大约阅读时间需要 10 分钟。
ASP.NET Core MVC跟ASP.NET MVC观念是一致的,使用上也没有什么太大的变化。之前的ASP.NET MVC把MVC及Web API的套件分开,但在ASP.NET Core中MVC及Web API用的套件是相同的。
本篇将介绍ASP.NET Core MVC设置方式。
ASP.NET Core的MVC(Model-View-Controller)架构模式延续ASP.NET MVC,把网站分成三大元件Model、View及Controller,依赖关系如下图:
在ASP.NET Core中使用MVC或Web API,需要
Microsoft.AspNetCore.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(); }}
这个是ASP.NET Core的预设路由,会将Request来的URL找到对应的Controller及Action。
建立一个简单的Model 用于Controller 跟View 互动。
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即可,如下: 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.UserModelHello~ 我是 @Model.Name
在*.cshtml
用@model
绑定Model的型别,才可以使用@Model
取得Controller传入的对象。
数据流动图如下:
老司机发车啦:
转载地址:http://pevwa.baihongyu.com/