在ASP.NET Core MVC中构建简单 Web Api

Getting Started

在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 Web Api 程序怎么办呢?

在 GitHub 中的 ASP.NET 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() 的源码:

public static IMvcBuilder AddMvc(this IServiceCollection services){    var builder = services.AddMvcCore();

    builder.AddApiExplorer();
    builder.AddAuthorization();

    AddDefaultFrameworkParts(builder.PartManager);    // Order added affects options setup order

    // Default framework order
    builder.AddFormatterMappings();
    builder.AddViews();
    builder.AddRazorViewEngine();
    builder.AddCacheTagHelper();    // +1 order
    builder.AddDataAnnotations(); // +1 order

    // +10 order
    builder.AddJsonFormatters();

    builder.AddCors();    return new MvcBuilder(builder.Services, builder.PartManager);
}

简单 Web Api

实际上,如果想构建一个简单 Web Api 程序的话,ASP.NET 团队已经为我们想到了这一点,所以我们只需要修改我们注入的服务。

首先,不需要引用 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 添加里面。

public void ConfigureServices(IServiceCollection services){
    services.AddMvcCore()
        .AddJsonFormatters();
}

最后一点就是,你的 XXXController 类中要继承 ControllerBase 而不是 Controller。 ControllerBase 里面没有提供任何关于对 Views 的支持。

public class XXXController: ControllerBase{
}

下面是最终的 project.json 引用的所有程序包。

"dependencies": {    "Microsoft.NETCore.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.Extensions.Configuration.CommandLine": "1.1.0",    "Microsoft.Extensions.Logging": "1.1.0",    "Microsoft.Extensions.Logging.Console": "1.1.0",    "Microsoft.Extensions.Logging.Debug": "1.1.0"}
时间: 2024-10-06 06:29:31

在ASP.NET Core MVC中构建简单 Web Api的相关文章

第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderson 翻译:谢炀(kiler) 校对:何镇汐.

ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用

原文:ASP.NET Core 入门教程 2.使用ASP.NET Core MVC框架构建Web应用 一.前言 1.本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 使用Visual Studio Code开发基于解决方案(sln+csproj)的项目 Visual Studio Code Solution插件( vscode-solution-explorer)基础使用介绍 基于 .NET Core web项目模板构建 ASP.NET Core MVC We

ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据

在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让用户下载,那么在Controller的Action中用Response.Body这个Stream流,来逐步发送文件数据到客户端浏览器是最好的办法. 但是我今天在ASP.NET Core MVC的Controller的Action中使用Response.Body输出数据到客户端浏览器的时候遇到了个问题

asp.net core mvc中如何把二级域名绑定到特定的控制器上

由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情况下需要给不同的板块设置不同的二级域名,如新浪体育sports.sina.com.cn. 在asp.net core mvc中,如果要实现板块的效果,可能会给不同的板块建立不同的控制器(当然也有其他的技术,这里不讨论实现方式的好坏),在这种情况下,如何给控制器绑定上独有的二级域名,比如体育频道对应的

007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing views and layout pages 修改视图和布局页 2.Change the title and menu link in the layout file 在布局文件中修改标题与菜单 3.Passing Data from the Controller to the View 从控制器向视图

ASP.NET Core MVC中URL和数据模型的匹配

Http GET方法 首先我们来看看GET方法的Http请求,URL参数和ASP.NET Core MVC中Controller的Action方法参数匹配情况. 我定义一个UserController,其中有一个只接受GET请求的Action方法GetDataInPage public class UserController : Controller { [HttpGet] public IActionResult GetDataInPage(string languageCode, int

c# – Asp.Net Core MVC中Request.IsAjaxRequest()在哪里?

要了解有关新的令人兴奋的Asp.Net-5框架的更多信息,我正在使用最新发布的Visual Studio 2015 CTP-6来构建一个Web应用程序. 大多数事情看起来真的很有希望,但我似乎找不到Request.IsAjaxRequest() – 一个在旧的MVC项目中经常使用的功能. 有没有更好的方法来做到这一点 – 这使得他们删除这种方法 – 或者是“隐藏”在别的地方? 感谢任何建议,在哪里找到它或做什么改为! 我有点困惑,因为标题提到了MVC 5. 搜索Ajax in the MVC6

三分钟学会在ASP.NET Core MVC 中使用Cookie

一.Cookie是什么? 我的朋友问我cookie是什么,用来干什么的,可是我居然无法清楚明白简短地向其阐述cookie,这不禁让我陷入了沉思:为什么我无法解释清楚,我对学习的方法产生了怀疑!所以我们在学习一个东西的时候,一定要做到知其然知其所以然. HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息).客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.客户端浏览器会把Cooki

ASP.NET Core MVC 中实现中英文切换

哈喽..大家好 很久没有更新了,今天就来一篇最近开发用到的功能,那就是中英文切换,这个实际上也不是高大上,先说一下原理,在.NET Core框架中给我们提供了全球化的类,叫做Localization,其官方的文档地址传送门. 在我的项目中,我是这样操作的,你想用别的方式,也可以看文档自己去搞.这个已经不是什么新鲜的东西了,只是网上的实现有些问题,不容易明白. 我们无需任何Nuget包,因为它是在 Microsoft.AspNetCore.Mvc.Localization 中,那么我们直接在.NE