Getting Started
在 Core MVC 框架中, 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 Web Api 程序怎么办呢?
在 GitHub 中的 Core MVC 源码里面,我们只要关注Microsoft.AspNetCore.Mvc
这个包,那么除了这个包之外它还包含这些:
Microsoft.AspNetCore.Mvc.ApiExplorer
Microsoft.AspNetCore.Mvc.Cors
Microsoft.AspNetCore.Mvc.DataAnnotations
Microsoft.AspNetCore.Mvc.Formatters.Json
Microsoft.AspNetCore.Mvc.Localization
Microsoft.AspNetCore.Mvc.Razor
Microsoft.AspNetCore.Mvc.TagHelpers
Microsoft.AspNetCore.Mvc.ViewFeatures
Microsoft.Extensions.Caching.Memory
Microsoft.Extensions.DependencyInjection
NETStandard.Library
通常情况下,我们在创建一个 Web MVC 网站的时候,会在 Startup.cs 文件中的ConfigureServices
方法中,这样添加:
services.AddMvc();
以上的代码会将 MVC 中的服务注入到 DI 容器中,我们来看一下AddMvc()
的源码:
publicstaticIMvcBuilderAddMvc(thisIServiceCollectionservices){varbuilder=services.AddMvcCore();builder.AddApiExplorer();builder.AddAuthorization();AddDefaultFrameworkParts(builder.PartManager);//Orderaddedaffectsoptionssetuporder//Defaultframeworkorderbuilder.AddFormatterMappings();builder.AddViews();builder.AddRazorViewEngine();builder.AddCacheTagHelper();//+1orderbuilder.AddDataAnnotations();//+1order//+10orderbuilder.AddJsonFormatters();builder.AddCors();returnnewMvcBuilder(builder.Services,builder.PartManager);}
简单 Web Api
实际上,如果想构建一个简单 Web Api 程序的话, 团队已经为我们想到了这一点,所以我们只需要修改我们注入的服务。
首先,不需要引用Microsoft.AspNetCore.Mvc
这个包了,转而引用Microsoft.AspNetCore.Mvc.Core
。 Mvc.Core 这个包只会给你提供基本的 MVC 中间件,比如路由,Controller, HttpResult 等,其他更多的如关于 Razor,Cores,Views 等则没有提供。
在 Web Api 应用中,大多数情况下是以 Json 进行数据序列化传输的,所以需要添加Microsoft.AspNetCore.Mvc.Formatters.Json
这个包。
然后,在ConfigureServices
,将 Mvc Core 中间件和 Json Formatter 添加里面。
publicvoidConfigureServices(IServiceCollectionservices){services.AddMvcCore().AddJsonFormatters();}
最后一点就是,你的 XXXController 类中要继承ControllerBase
而不是Controller
。 ControllerBase 里面没有提供任何关于对 Views 的支持。
publicclassXXXController:ControllerBase{}
下面是最终的 project.json 引用的所有程序包。
"dependencies":{"Core.App":{"version":"1.1.0","type":"platform"},"Microsoft.AspNetCore.Mvc.Core":"1.1.0","Microsoft.AspNetCore.Mvc.Formatters.Json":"1.1.0","Microsoft.AspNetCore.Server.IISIntegration":"1.1.0","Microsoft.AspNetCore.Server.Kestrel":"1.1.0","Microsoft.Extensions.Configuration.EnvironmentVariables":"1.1.0","Microsoft.Extensions.Configuration.FileExtensions":"1.1.0","Microsoft.Extensions.Configuration.Json":"1.1.0","Microsoft.mandLine":"1.1.0","Microsoft.Extensions.Logging":"1.1.0","Microsoft.Extensions.Logging.Console":"1.1.0","Microsoft.Extensions.Logging.Debug":"1.1.0"}