膀胱炎挂什么科| 朋友圈ps是什么意思| 为什么手机会发烫| 右腿麻木是什么原因| 中风是什么| 相宜的意思是什么| 胸口疼痛挂什么科| 平躺头晕是什么原因| 多梦睡眠质量不好是什么原因| 狗有眼屎是什么原因| 肖可以加什么偏旁| 无中生有是什么生肖| 不锈钢肥皂是什么原理| 总是出汗是什么原因| 一条线是什么意思| 汪峰什么星座| 瓜蒌是什么东西| 转归是什么意思| 大黄米是什么米| 婴儿什么时候开始认人| 枸杞泡茶有什么功效| 侧面是什么意思| 喝茶叶有什么好处| redline是什么牌子| ige是什么| 女性风湿吃什么东西好| 乳糖是什么糖| 女人太瘦吃什么增肥| 贫血是什么引起的| 放疗和化疗有什么区别| 晏殊字什么| 艾滋病是什么引起的| 虾头部黄黄的是什么| 婴儿喝什么奶粉最好| 什么呢| 雷公根有什么功效| 氮是什么| 比丘什么意思| 厦门房价为什么那么高| 房颤什么症状| 怀孕初期吃什么对胎儿发育好| 草字头加果念什么| 兔子的眼睛为什么是红色的| 月经量特别少是什么原因| 角化型脚气用什么药最好| 阴唇肥大有什么影响| 睾丸积液是什么原因造成的| 户籍是指什么| 血氧饱和度什么意思| 左侧卵巢囊性回声是什么意思| 梦见冥币是什么意思| 什么是慰安妇| 不寐病属于什么病症| 子午流注是什么意思| 智齿旁边的牙齿叫什么| 什么心什么心| 房颤是什么| 凌晨五点是什么时辰| 怀疑甲亢需要做什么检查| 36 80是什么罩杯| 勃起不坚吃什么药| 卵巢早衰吃什么药调理最好| 精气是什么意思| 肠镜前一天吃什么| 炖鸡放什么调料好吃| 花指什么生肖| 木薯淀粉是什么做的| 左肺上叶纤维灶是什么意思| 动一下就出汗是什么原因| 什么是韧带| 一个小时尿一次是什么原因| 手上有红点是什么原因| 银河是什么| 1992年属什么生肖| 办健康证挂什么科| 眼睛模糊用什么药好| 菠菜补什么| 拔罐有什么好处| 疖肿是什么原因引起的| 7月11日是什么日子| 血氧饱和度是什么| 什么叫统招| 为什么同房后会出血| 掉头发是缺什么维生素| 利多卡因是什么| 69年属什么生肖| 九重天是什么意思| 高血压有什么症状表现| 甲沟炎什么症状| 勾芡是什么意思| 跛脚是什么意思| 腋毛变白是什么原因| 小便次数多吃什么药| 胃胀气吃什么食物| 湿气重吃什么中成药| 七七是什么意思| 猪砂是什么东西| 借鉴是什么意思| 10.19什么星座| 什么的风雨| 窦性心律t波改变是什么意思| 玉势是什么| 轮状病毒吃什么药| 什么是意识| 内蒙古代叫什么| 胸有成竹是什么意思| 阿斯伯格综合症是什么| 男生被口是什么感觉| 心阳虚吃什么药| diy是什么意思| 红海是什么意思| 生吃大蒜有什么好处| 荷兰豆炒什么好吃| 六月六日是什么日子| 随机血糖是什么意思| 维民所止什么意思| 阴道痒吃什么药| 什么情况下要打破伤风针| 大面积杀跳蚤用什么药| 澳门是什么花| 鸡蛋和什么搭配最营养| 移徙是什么意思| 白天看见蛇有什么预兆| 佛心果是什么东西| 黄皮适合什么颜色的衣服| 生病吃什么| 冠军是什么意思| 牙齿上白色斑块是什么| 甲醛中毒什么症状| by是什么意思| 脸上长痘痘什么原因| 四个月宝宝可以吃什么辅食| 去鱼腥味最好的方法是什么| 甲硝唑治什么| 念字五行属什么| 葫芦藓是什么植物| 嘴巴发麻是什么原因| 嘴无味是什么病的征兆| 虚不受补是什么意思| 熬夜 吃什么| 烫伤忌口不能吃什么| 农历五月属什么生肖| 尿崩症是什么症状| 2017年是属什么年| 高血压药什么时候吃最好| 胃烧心是什么原因| 12月11日是什么星座| design是什么牌子| 胆囊大是什么原因| 什么水果营养价值最高| 子宫出血什么原因| 不动产是什么意思| 跟腱炎吃什么药| 流产有什么症状或感觉| 什么情况下需要会诊| ask是什么意思| 心穷是什么意思| balenciaga什么品牌| 铠是什么意思| 手足口病是什么病| qw医学上是什么意思| 什么是标准预防| 出马仙是什么意思| 兔死狐悲是什么生肖| 弹性工作是什么意思| 鼻窦炎用什么药效果最好| 土是什么颜色| 什么是纸片人| moncler是什么牌子| 胰腺在什么位置| 海参有什么功效| 狼图腾是什么意思| 农历五月十八是什么星座| 什么是软文| 鼠配什么生肖最好| 男人眉毛长代表什么| 重症肌无力是什么病| 月经来了不能吃什么东西| 凭什么| 强迫症吃什么药效果好| 阴茎越来越小是什么原因| 什么什么入胜| 脚底板脱皮是什么原因| 龙生九子是什么生肖| 含五行属什么| nafion溶液是什么| xxoo是什么| 早上4点是什么时辰| 青少年吃什么钙片有助于长高| 什么是调和油| 肺炎吃什么药好得快| 飧泄是什么意思| 房颤有什么危害| 饭后痰多是什么原因| 腺管瘤是什么| 什么的小草| 化气行水是什么意思| 陷阱是什么意思| 突然呕吐是什么原因| 甲醛什么气味| ibs是什么意思| 一月二十五号是什么星座| 磷高了会出现什么症状| 产后屁多是什么原因| 小便带血是什么原因| 飞行模式和关机有什么区别| 甲沟炎是什么症状| 潜叶蝇打什么药效果好| 睡觉趴着睡什么原因| 96345是什么电话| 96年的鼠是什么命| latex是什么| 36是什么罩杯| 跳舞有什么好处| 体重下降是什么原因| 胃炎挂什么科| 威士忌是用什么酿造的| 精字五行属什么| 科颜氏属于什么档次| 沙门氏菌用什么药最好| 肥皂是什么做的| 黄历冲生肖是什么意思| 白细胞少了会得什么病| 4月8日什么星座| 胆囊息肉有什么症状| 秦始皇长什么样| 什么是剧烈运动| 短裙配什么鞋子好看| 梦见捡到钱是什么意思| 蛋白粉和胶原蛋白粉有什么区别| 老人家头晕是什么原因| 5月份是什么星座| 拉脱水是什么症状| 虎的本命佛是什么佛| 双子座男生喜欢什么样的女生| 安全总监是什么级别| 养精蓄锐是什么意思| 矜贵是什么意思| 舌头上有黑苔是什么原因| 女同是什么| 肌酸激酶高挂什么科| 莫代尔是什么| 就请你给我多一点点时间是什么歌| 丽珠兰是什么| 绿豆汤什么颜色| 装孙子是什么意思| 产后抑郁症有什么表现症状| 量贩什么意思| 甲状腺结节吃什么好| 中伤是什么意思| 肠镜活检意味着什么| 脑瘤有什么症状| 绿茶喝多了有什么危害| 签发是什么意思| 什么是纤维瘤| 10月28日什么星座| 胃溃疡吃什么药好| 谁与争锋是什么意思| 万宝龙手表什么档次| 翡翠都有什么颜色| 肺部条索灶是什么意思| 尿路感染吃什么药好| 懿怎么读 什么意思| 高中生物学什么| 百度跳转到内容

人民日报:2018 我有一个健康梦

维基百科,自由的百科全书
ASP.NET Core MVC
开发者Microsoft
编程语言.NET 编程语言,例如C#VB.NET
类型跨平台Web应用程序MVC
许可协议Apache License 2.0
网站文件库GitHub入口
百度 学校围绕沐浴传统文化阳光,培育现代文武少年的育人目标,利用课余放学之后的时间开展社团活动,促进学生个性发展。


ASP.NET Core MVCASP.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 相容套件
Microsoft.AspNetCore.Razor Razor 的核心类别库

基础建设

[编辑]

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 的程式码[1]

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)[2],例如:

app.MapControllerRoute(
    name: "default",
    pattern: "{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

[编辑]

ASP.NET Core MVC 的 Model 与 ASP.NET MVC 上使用的概念类似,官方虽建议使用 Entity Framework Core,但却不是强制,开发者可以依应用程序自身的需求来定义 Model,也可以将 Model 移到别的类别库内与其他专案共用。

基于关注点分离的需要,在 MVC 应用程序内会依 View 的需求另外建立单独的 Model,此类 Model 称为 View Model,不过 ASP.NET Core MVC 也没有针对这个做特别的限制。

View

[编辑]

ASP.NET Core MVC 的 View 除了由 ASP.NET MVC 衍生而来的标准的 View 功能外,另外新增了数项 View 的功能,包含 View Component 以及 Tag Helper。

View Component[3]

[编辑]

View Component (检视元件) [4] 与原有的 Partial View (部分检视) 相当类似,MVC 5 也可以利用 Child Action 加上 Partial View 的机制来实作出与 View Component 相同的功能,但基于关注点分离原则,若在 Controller 中加入过多的 Child Action 反而会造成 Controller 职责过重,Controller 的程式码也会变得肥大,因此 Core MVC 加入这个新功能,每一个 View Component 都是独立的后端程式,以一对一的方式对应 View。

View Component 基本上可以看做是一个类似 Controller 的元件,它也可以使用像 ViewBag 或 TempData 这样的功能,不过它是由 View 来唤起的,例如下列程式为 View Component 的范例实作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace HelloMvc.Components
{
    [ViewComponent(Name = "AddNumber")]
    public class AddNumberComponent : ViewComponent
    {
        public async Task<IViewComponentResult> InvokeAsync(int Number1, int Number2)
        {
            int result = Number1 + Number2;
            ViewBag.N1 = Number1;
            ViewBag.N2 = Number2;
            return View(result);
        }
    }
}

View Component 可以由 Controller 唤起 (回传 ViewComponentResult) 或是由 View 唤起 (使用 Razor 的 Component.InvokeAsync()),例如:

<div>@await Component.InvokeAsync("AddNumber", new { Number1 = 1, Number2 = 2})</div>

Tag Helper[5]

[编辑]

Tag Helper [6]是 ASP.NET Core MVC 加入的最具威力的 View 功能,在还没有 Tag Helper (即 ASP.NET MVC) 的时候,当 View 所需的功能愈来愈多时,一张 View (cshtml/vbhtml) 会充斥着 Razor 程式码或是 Partial View 的呼叫,让整个 View 显得相当凌乱,而 Tag Helper 所提供的功能就是直接基于 HTML Tag 本身进行处理,不但可以扩充现有的 tag,也可以自订自己的 tag,例如 ASP.NET MVC 时期的表单,大多会用 @Html.BeginForm() 进行包装,例如:

@using (Html.BeginForm("Login", "Account", new { returnurl = ViewData["ReturnUrl"] }, FormMethod.Post, new { @class = "form-horizontal" }))
{
  // ...
}

但使用了 Tag Helper 之后,View 上的程式码就可以移除,变成:

<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
...
</form>

其中的 asp-controller、asp-action、asp-route-returnurl 即是使用 Tag Helper 扩充而得。

Tag Helper 的实作与 View Component 类似,它要求继承自 Microsoft.AspNetCore.Razor.TagHelpers 内的 TagHelper 类别,例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;

namespace HelloMvc.TagHelpers
{
    public class EmailTagHelper : TagHelper
    {
        private const string EmailDomain = "contoso.com";

        // Can be passed via <email mail-to="..." />. 
        // Pascal case gets translated into lower-kebab-case.
        public string MailTo { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "a";    // Replaces <email> with <a> tag

            var address = MailTo + "@" + EmailDomain;
            output.Attributes.SetAttribute("href", "mailto:" + address);
            output.Content.SetContent(address);
        }
    }
}

然后在 View 中引用这个 Tag Helper (可以在 _ViewImport.cshtml 内引用或是在该 View 中引用),就可以直接使用自己定义的 Tag 了。

<div>
    <h4><email mail-to="jason">support</email></h4>
</div>

相依注入功能

[编辑]

受惠于 ASP.NET Core 的基础建设,ASP.NET Core MVC 能充份享有基础建设所支援的相依注入能力,在起始类别中加入对服务的注册,就能够在 Controller 与 View 中使用注册的类别。

例如下列程式会在服务清单中加入一个自订的类别:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    // 註冊服務
    services.AddTransient<IDateTimeIndicator, DefaultDateTimeIndicator>(); // DefaultDateTimeIndicator 實作了 IDateTimeIndicator 介面
}

若要在 Controller 中使用这个注册的服务,可以使用下列三种方式:

  • 建构式注入 (Constructor Injection):在 Controller 的建构式中加入该服务的参数,当 Controller 被生成时,ASP.NET Core MVC 会由服务清单中取出指定的界面物件。
  • 方法注入 (Method Injection):在 Controller 的方法中加入 [FromService] 的修饰,ASP.NET Core MVC 若发现方法中有这样的修饰时就会由服务清单中取出指定的界面物件。
  • 属性注入 (Property Injection):在 Controller 的属性以 [FromService] 修饰,ASP.NET Core MVC 若发现属性中有这样的修饰时就会由服务清单中取出指定的界面物件。

例如:

public class SettingsController : Controller
{
    private readonly SampleWebSettings _settings;

    public SettingsController(IOptions<SampleWebSettings> settingsOptions ) // 注入服務
    {
        _settings = settingsOptions.Value;
    }

    public IActionResult Index()
    {
        ViewData["Title"] = _settings.Title;
        ViewData["Updates"] = _settings.Updates;
        return View();
    }
}

若要在 View 中使用,则需要用 @inject 指令指定服务,接着就可以使用此变数来操作服务。

@using HelloMvc.Services;
@inject IDateTimeIndicator indicator 
<html>
    <body>
        ...
        <div>
            <ul>
                <li>@indicator.GetNowIndicator(new DateTime(2016, 5, 7, 0, 0, 0))</li>
                <li>@indicator.GetNowIndicator(new DateTime(2016, 5, 7, 0, 5, 0))</li>
                <li>@indicator.GetNowIndicator(new DateTime(2016, 5, 6, 0, 20, 0))</li>
                <li>@indicator.GetNowIndicator(new DateTime(2016, 5, 5, 0, 0, 0))</li>
            </ul>
        </div>
    </body>
</html>

参考

[编辑]
  1. ^ Application Startup. [2025-08-07]. (原始内容存档于2025-08-07). 
  2. ^ Rick-Anderson. 在 ASP.NET Core 中路由到控制器操作. docs.microsoft.com. [2025-08-07] (中文(中国大陆)). 
  3. ^ Rick-Anderson. ASP.NET Core 中的视图组件. docs.microsoft.com. [2025-08-07] (中文(中国大陆)). 
  4. ^ View Components. [2025-08-07]. (原始内容存档于2025-08-07). 
  5. ^ Rick-Anderson. ASP.NET Core 中的标记帮助程序. docs.microsoft.com. [2025-08-07] (中文(中国大陆)). 
  6. ^ Introduction to Tag Helpers. [2025-08-07]. (原始内容存档于2025-08-07). 


西兰花和什么菜搭配 雷锋代表什么生肖 咸肉烧什么好吃 高血糖能吃什么水果 脚拇指外翻是什么原因造成的
搪瓷杯为什么被淘汰了 左右逢源是什么生肖 人心隔肚皮什么意思 什么是超纤皮 苦瓜有什么作用
梦见蛇是什么预兆 鸾凤和鸣什么意思 b12是什么 屁为什么是臭的 梦见一坨屎是什么意思
吃黄精有什么好处 妈祖属什么生肖 拔罐红色是什么原因 中国属于什么人种 阴道口痒是什么原因
农历五月十九是什么日子hcv9jop1ns3r.cn 紧张是什么意思hcv8jop7ns3r.cn 幽门杆菌吃什么药hcv9jop8ns3r.cn 车前草有什么功效和作用hcv8jop4ns1r.cn oa期刊是什么意思hcv8jop5ns1r.cn
早晨嘴苦是什么原因引起的hcv8jop0ns4r.cn 衣冠禽兽是什么意思hcv9jop1ns5r.cn 四六风是什么病hcv9jop6ns1r.cn 甲亢是什么回事jinxinzhichuang.com 风流人物指什么生肖wzqsfys.com
右手中指指尖麻木是什么原因hcv8jop4ns3r.cn 什么是闰月hcv8jop5ns6r.cn 公元前3000年是什么朝代hcv7jop9ns6r.cn 什么的月季hcv7jop4ns8r.cn 汉武帝叫什么名字youbangsi.com
尼麦角林片治什么病hanqikai.com 锻练与锻炼有什么区别hcv8jop3ns7r.cn 网是什么结构的字hcv8jop7ns9r.cn 老年人吃什么增强免疫力hcv8jop4ns1r.cn 外周血是什么意思hcv9jop8ns3r.cn
百度