ASP.NET Core MVC
開發者 | Microsoft |
---|---|
当前版本 | 1.0.0(預定2016年6月下旬發行 [1]) |
预览版本 | 1.0.0-rc2(預定2016年5月中旬發行 [1]) |
编程语言 | .NET 程式語言,例如C#、VB.NET |
类型 | Web應用程式、MVC |
许可协议 | MIT License |
网站 | 文件庫、GitHub、入口 |
ASP.NET Core MVC 是 ASP.NET Core 內,提供給 Web 應用程式開發的框架,它可視為 ASP.NET MVC 的後繼版本,其主要功能均衍生自 ASP.NET MVC,但它除了基於 ASP.NET Core 外,也將 ASP.NET MVC 與類似平台進行了整合,例如負責 View 的 ASP.NET Web Pages 以及負責 RESTful API 的 ASP.NET Web API,都與 ASP.NET Core MVC 的核心合併,因此在 ASP.NET Core MVC 中將可同時並存 MVC 網頁以及 RESTful API。
相關組件
ASP.NET Core MVC 包含了下列組件,基於 .NET Core 的精神,只有需要用到的才需要加入參考 (於 project.json),因此開發者可以自由選擇,而不必把所有的組件都加進來。
組件 | 功能 |
---|---|
Microsoft.AspNetCore.Mvc | ASP.NET Core MVC 引用套件 |
Microsoft.AspNetCore.Mvc.Abstractions | ASP.NET Core MVC 功能的抽象層 |
Microsoft.AspNetCore.Mvc.ApiExplorer | ASP.NET Core MVC 的 API 文件支援 |
Microsoft.AspNetCore.Mvc.Core | ASP.NET Core MVC 核心組件 |
Microsoft.AspNetCore.Mvc.Cors | 提供 Web API 所需要的 CORS 能力 |
Microsoft.AspNetCore.Mvc.DataAnnotations | MVC 所需的資料標示 (Data Annotation) 功能 |
Microsoft.AspNetCore.Mvc.Formatters.Json | MVC/Web API 所需的 JSON 序列化器 |
Microsoft.AspNetCore.Mvc.Formatters.Xml | MVC/Web API 所需的 XML 序列化器 |
Microsoft.AspNetCore.Mvc.Localization | MVC 應用程式本地化支援 |
Microsoft.AspNetCore.Mvc.Razor | MVC Razor 的核心類別庫 (若要在 MVC 中使用 Razor 就必須參考此組件) |
Microsoft.AspNetCore.Mvc.Razor.Host | MVC Razor 的執行期引擎 |
Microsoft.AspNetCore.Mvc.TagHelpers | MVC Tag Helper 的核心類別庫 |
Microsoft.AspNetCore.Mvc.ViewFeatures | MVC View 功能的類別庫 (Controller 類別的實作在此) |
Microsoft.AspNetCore.Mvc.WebApiCompatShim | Web API 相容套件 |
基礎建設
ASP.NET Core MVC 採用 ASP.NET Core 作為基礎,因此享有內建的相依注入能力 (Dependency Injection),ASP.NET Core MVC 本身也是 ASP.NET Core 的服務之一,因此必須要在 ASP.NET Core 的起始類別中註冊並使用 MVC,才可以享有 MVC 的功能。下列例子即為在一個 ASP.NET Core 的程式的起始類別 (通常被命名為 Startup) 中註冊並啟用 ASP.NET Core MVC 的程式碼[2]:
public void ConfigureServices(IServiceCollection services)
{
// 加入 ASP.NET Core MVC 服務
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// ...
// 啟用 ASP.NET Core MVC
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
註冊 ASP.NET Core MVC 服務後,ASP.NET Core 會自動將 MVC 的執行引擎加入 ASP.NET Core 的管線式相依注入 (Pipeline-based Dependency Injection) 的服務清單內,以開始提供 MVC 的相關服務。
路由
ASP.NET Core MVC 強化了 ASP.NET Routing 技術,使其更具彈性,除了原有的由起始類別加入的路由外,亦全面整合了之前在 ASP.NET MVC 5.2 / Web API 2.1 起支援的屬性路由能力 (Attribute Routing),這表示開發人員不一定需要在起始類別註冊 MVC 時定義路由,只需要在 Controller 內加入路由設定即可,但官方還是建議至少加入預設路由 (default routes),例如:
app.UseMvc(routes => {
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Controller
ASP.NET Core MVC 可同時支援 MVC 本身的功能以及 Web API 的功能,它們都源自相同的 Controller 基底類別,此類別已被重新實作,以支援一般的 View 以及 RESTful API 的回傳值,微軟亦重新定義了 ActionResult 類別,提出新的 IActionResult 介面,但開發人員不一定要回傳 IActionResult 介面,也可以直接回傳 .NET 內建的資料型態,Controller 會自動將它對應到 Content Result。雖然微軟建議以 IActionResult 為傳回型別,但原本的 ActionResult 型別仍然適用。
下列程式是一個標準的 ASP.NET Core MVC Controller 的實作,和 ASP.NET MVC 差異相當小。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplication18.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
public IActionResult Error()
{
return View();
}
}
}
Model
View
參考