我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ASP.NET Core之Web API怎么创建

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ASP.NET Core之Web API怎么创建

这篇文章主要介绍“ASP.NET Core之Web API怎么创建”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET Core之Web API怎么创建”文章能帮助大家解决问题。

1.简单介绍

ASP.NET Core Web API 是 ASP.NET Core MVC 的一个功能。ASP.NET Core MVC 包含了对 Web API 的支持。可以构建多种客户端的 HTTP 服务。ASP.NET Core Web API可用于在 .NET Core 上构建 RESTful 应用程序。

框架包含对 HTTP 内容协商的支持,内置支持以 JSON 或 XML 格式化的数据。编写自定义格式化程序已添加对自有格式的支持。

使用链接生成对超媒体的支持。启用对跨资源共享(CORS)的支持,以便 Web API 可以在多个 Web应用程序之间共享。

例如,新建一个 API 项目,默认包含一个 ValuesController:

[Route("api/[controller]")]    [ApiController]    public class ValuesController : ControllerBase    {        // GET api/values        [HttpGet]        public ActionResult<IEnumerable<string>> Get()        {            return new string[] { "value1", "value2" };        }        // GET api/values/5        [HttpGet("{id}")]        public ActionResult<string> Get(int id)        {            return "value";        }        // POST api/values        [HttpPost]        public void Post([FromBody] string value)        {        }        // PUT api/values/5        [HttpPut("{id}")]        public void Put(int id, [FromBody] string value)        {        }        // DELETE api/values/5        [HttpDelete("{id}")]        public void Delete(int id)        {        }    }

默认包含了 GET,POST,PUT,DELETE 这几个 HTTP 请求操作。这里直接使用特性路由,在控制器上注明 [Route("api/[controller]")]。调试并打开浏览器输入 https://localhost:5000/api/values ,会返回数据。

2.自定义格式化(Format)

ASP.NET Core MVC内建支持对相应数据的格式,用来修正格式或生成客户端指定的格式。

1.特定格式的操作结果

某些操作结果的类型是特定的格式,比如 JsonResult 或 ContentResult 。操作可以总是返回格式为特定格式的具体结果。比如返回 JsonResult 时将返回 JSON 格式化数据,而不管客户端要求的是什么格式。

操作并不要求返回任何特定的类型, MVC 支持任何对象作为返回值。如果操作返回的是 IActionResult 的某个实现,并且控制器继承自 Controller ,那么可以使用更多辅助方法。如果不是,则将使用合适的 IOutputFormatter 实现序列化对象。

若要从继承 Controller 基类的控制器返回特定格式的数据,可以使用内置的辅助方法 Json 来返回 JSON 格式, 使用 Content 来返回 纯文本。操作方法的返回类型必须是指定的结果类型(如 JsonResult)或 IActionResult。

[HttpGet]        public JsonResult Get()        {            return Json(new User());        }

以上代码 Content-Type 将返回 application/json。

要想返回纯文本格式的数据,则使用 ContentResult 以及 Content 辅助方法:

[HttpGet]        public ContentResult Get()        {            return Content("result");        }

以上代码 Content-Type 将返回  test/plan 。 也可以使用一个字符串相应类型来实现这个行为:

[HttpGet]        public string Get()        {            return "result";        }

对于具有多个返回类型或选项的复杂操作,请选择 IActionResult 作为返回类型。

2.配置格式化程序

如果应用程序想支持默认 JSON 之外的格式,可以在 project.json 文件中添加这些额外的依赖项,并配置 MVC 来支持。输入和输出的格式是可以隔离的。输入格式通过使用模型绑定,输出格式通过格式化响应。

3.添加对 XML 格式的支持

要添加对 XML 格式的支持,需要先安装 Microsoft.AspNetCore.Mvc.Formatters.Xml 包,然后在 ConfigureServices 中配置 XmlSerializerFormatters :

services.AddMvc()                .AddXmlSerializerFormatters()                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

或者可以只添加输出格式:

services.AddMvc(options => {                options.OutputFormatters.Add(new XmlSerializerOutputFormatter());            })                //.AddXmlSerializerFormatters()                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

这两种方法都将使用 System.Xml.Serialization.XmlSerializer 序列化结果。还可以通过添加其他相关格式来使用 System.Runtime.Serialization.DataContractSerializer :

services.AddMvc(options => {                options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());            })                //.AddXmlSerializerFormatters()                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

4.强制特定格式化

若是想为某个操作限制响应格式,则可以使用 [Produces] 过滤器。[Produces] 过滤器可以为这个控制器或 Action 指定响应格式:

[HttpGet("{id}", Name = "Get")]        [Produces("application/json")]        public string Get(int id)        {            return "value";        }

对于一些特殊情况,可能不想使用内建的格式化实现。默认情况下,返回类型为 string 时将格式化为 text/plain 。这种行为可以通过移除 TextOutputFormatter 来改变:

public void ConfigureServices(IServiceCollection services)        {            services.AddMvc(options => {                options.OutputFormatters.RemoveType<TextOutputFormatter>();                options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();            }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);        }

上面移除了 TextOutputFormatter 和 HttpNoContentOutputFormatter,当返回类型为 string 时,将返回 406 Not Acceptable。如果存在 XML 格式化程序,则将格式化响应结果。

移除了 HttpNoContentOutputFormatter ,当返回某个返回类型为模型对象的操作返回 null 时,将返回 204 No Content 响应。JSON 格式将简单地返回主体信息为 null 的响应,而 XML 格式将返回一个空的带有 xsi:nil="true" 属性的 XML 元素。

5.响应格式 URL 映射

客户端可以在 URL 中请求特定的格式,比如在请求字符串或路径中,或者通过使用特定格式的文件扩展名(比如 .xml 或 .json),需要在 API 所使用的路由中指定:

[FormatFilter]    public class UserController : Controller    {        // GET: api/User        [HttpGet]        [Route("[controller]/[action]/{id}.{format?}")]        public IActionResult GetById(int id)        {            return Content("xxx");        }}

这个路由配置将允许使用可选的文件扩展名来指定格式。[FormatFilter] 特性将在 RouteData 中检查该格式的值是否存在,并创建响应时将响应数据映射到相应的格式:

RouteFormatter

/User/GetById/5 :默认输出格式

/User/GetById/5.json :JSON格式(如果配置过)

/User/GetById/5.xml; :XML格式(如果配置过)

6.自定义格式化程序 Protocol Buffers (简称 protobuf)

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC(远程过程调用协议)数据交换格式。可用于通讯协议,数据存储等领域的语言无关,平台无关,可扩展的序列化结构数据格式。比如实现一个程序返回 protobuf 格式:

创建 API 项目,添加 protobuf-net 引用。

添加 ProtobufFormatter 类:

public class ProtobufFormatter:OutputFormatter    {        public string ContentType { get; private set; }        public ProtobufFormatter()        {            ContentType = "application/proto";            SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/proto"));        }        public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context)        {            if (context == null)            {                throw new ArgumentNullException(nameof(context));            }            var response = context.HttpContext.Response;            Serializer.Serialize(response.Body,context.Object);            return Task.FromResult(0);        }    }

继承 OutputFormatter ,然后实现 WriteResponseBodyAsync 方法,初始化时赋值 ContentType ,并添加支持 MediaType。在 WriteResponseBodyAsync 方法中获取 Response ,调用 protobuf-net 的 Serializer.Serialize 方法将 Object 序列化至输出内容。 protobuf 在序列化时必须指定顺序,添加 User 类,实现 protobuf 实体:

[ProtoContract]    public class User    {        [ProtoMember(1)]        public int Id { get; set; }        [ProtoMember(2)]        public string Name { get; set; }        [ProtoMember(3)]        public int Age { get; set; }    }

类上需要添加 [ProtoContract] 特性,字段上需要 ProtoMember 特性,并指定顺序。然后修改 UserController:

[Route("api/[controller]")]    [ApiController]    [FormatFilter]    public class UserController : Controller    {        private IEnumerable<User> users;        public UserController()        {            users = new User[] {                new User(){ Id=1,Name="Bob",Age = 20},                new User(){ Id=2,Name="Tom",Age = 22}            };        }        // GET: api/User        [HttpGet]        [Produces("application/proto")]        public IEnumerable<User> Get()        {            return users;        }}

修改 ConfigureServices :

public void ConfigureServices(IServiceCollection services)        {            services.AddMvc(options => {                options.OutputFormatters.Add(new ProtobufFormatter());            }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);        }

运行程序,会返回一个二进制文件。

创建一个控制台,检查序列化:

class Program    {        static void Main(string[] args)        {            HttpClient client = new HttpClient();            var stream = client.GetStreamAsync("https://localhost:44358/api/User").Result;            var users = Serializer.Deserialize<List<User>>(stream);            foreach (var user in users)            {                Console.WriteLine($"Id:{user.Id} - Name:{user.Name} - Age:{user.Age}");            }            Console.ReadKey();        }    }

关于“ASP.NET Core之Web API怎么创建”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ASP.NET Core之Web API怎么创建

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ASP.NET Core之Web API怎么创建

这篇文章主要介绍“ASP.NET Core之Web API怎么创建”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET Core之Web API怎么创建”文章能帮助大家解决问题。1.简单介绍
2023-06-30

怎么创建ASP.NET Core Web应用程序

本文小编为大家详细介绍“怎么创建ASP.NET Core Web应用程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么创建ASP.NET Core Web应用程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-06-29

详解ASP.NET Core Web Api之JWT刷新Token

前言 如题,本节我们进入JWT最后一节内容,JWT本质上就是从身份认证服务器获取访问令牌,继而对于用户后续可访问受保护资源,但是关键问题是:访问令牌的生命周期到底设置成多久呢?见过一些使用JWT的童鞋会将JWT过期时间设置成很长,有的几个小
2022-06-07

ASP.Net Core(C#)创建Web站点的实现

ASP.NETCore(C#)是一个跨平台、现代、开源的Web框架,用于构建Web应用程序和API。它具有以下主要特点和优势:特点:跨平台支持、轻量级和高性能、模块化架构、依赖项注入、Razor视图引擎、RESTfulAPI支持、身份验证和授权。优势:提高性能、增强的可扩展性、改进的可维护性、跨平台支持、社区支持。ASP.NETCore非常适合以下场景:企业级Web应用程序基于API的应用程序单页应用程序(SPA)跨平台应用程序
ASP.Net Core(C#)创建Web站点的实现
2024-04-02

ASP.NET Core怎么构建OData查询Restful API

这篇文章主要讲解了“ASP.NET Core怎么构建OData查询Restful API”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core怎么构建OData查询Restf
2023-06-30

ASP.NET Core怎么使用EF创建模型

这篇文章主要介绍“ASP.NET Core怎么使用EF创建模型”,在日常操作中,相信很多人在ASP.NET Core怎么使用EF创建模型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET Core怎
2023-06-29

ASP.NET Core中的Razor页面怎么创建

这篇文章主要介绍“ASP.NET Core中的Razor页面怎么创建”,在日常操作中,相信很多人在ASP.NET Core中的Razor页面怎么创建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET
2023-06-29

ASP.NET Core怎么使用EF创建关系模型

今天小编给大家分享一下ASP.NET Core怎么使用EF创建关系模型的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.关系
2023-06-29

怎样使用Jwt身份认证保护 Asp.Net Core Web Api

怎样使用Jwt身份认证保护 Asp.Net Core Web Api,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。网络上有许多资源可以教你如何保护ASP.NET
2023-06-19

剖析 ASP Core 的 Web API:创建可扩展的 RESTful 服务

本文深入探讨了 ASP.NET Core 中的 Web API,着重于创建可扩展且符合 RESTful 原则的 API。我们将涵盖路由、控制器、操作、数据模型和版本控制等关键概念,并通过代码示例进行说明。
剖析 ASP Core 的 Web API:创建可扩展的 RESTful 服务
2024-03-07

ASP.NET Core怎么配置和管理Web主机

本篇内容主要讲解“ASP.NET Core怎么配置和管理Web主机”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET Core怎么配置和管理Web主机”吧!1.前言ASP.NET Co
2023-06-29

使用ASP.NET怎么创建一个网站web页面

使用ASP.NET怎么创建一个网站web页面?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建网站1.从网上下载VS2017,我接触的朋友和公司大多数都是使用VS2017/VS
2023-06-14

ASP.NET调试API之Log4net怎么用

这篇文章主要介绍了ASP.NET调试API之Log4net怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1 简介1.1 Log4net的优点:几乎所有的大型应用都会有自
2023-06-17

怎么创建API provider

本篇内容介绍了“怎么创建API provider”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!登录API portal:在home界面,创建
2023-06-04

怎么创建一个.NET Core工程

小编给大家分享一下怎么创建一个.NET Core工程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、打开VS2019,点击“创建新项目”,选择“ASP.NET
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录