使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action

Demo

下面我们就来实践一下。打开之前的项目,并建立CompaniesController 

640?wx_fmt=png

这里有6个地方比较关键,我们挨个看一下: 

  1. RESTful API 或者其它Web APIController都应该继承于 ControllerBase 这个类(点此查看详细的官方文档),而不是Controller这个类。 

    1.  

    2. ControllerBase 类提供了很多用于处理 HTTP 请求的属性和方法。 例如,ControllerBase.CreatedAtAction 返回 201 状态代码。关于ControllerBase的属性和方法的详细列表,请查看官方参考文档 

  2. [ApiController]。这个属性是应用于Controller的,它其实并不是强制的,但是它提供了一些帮助,使得Web API的开发体验更好。详细教程请点击 [ApiController]的官方文档。在Controller上面添加了[ApiController]属性之后,就会启用以下行为: 

    1. 要求使用属性路由(Attribute Routing)。也就是不能通过StartupConfigure方法统一配置路由模板。这部分的详细介绍请点击:官方文档 

    2. 自动HTTP 400响应。也就是Action方法传入的model含有验证错误的时候,自动触发HTTP 400响应。这部分的详细介绍请点击:官方文档 

    3. 推断参数的绑定源。它将会推断出Action方法的参数到底来自哪个绑定源,例如[FromBody][FromForm]等等。这部分的详细介绍请点击:官方文档 

    4. Multipart/form-data 请求推断使用 [FromForm] 属性批注操作参数时,[ApiController] 属性应用推断规则,它会推断 multipart/form-data 请求内容类型。这部分的详细介绍请点击:官方文档 

    5. 错误状态代码的问题详细信息MVC 会将错误结果(状态代码为 400 或更高的结果)转换为状态代码为 ProblemDetails 的结果。 ProblemDetails 类型基于 RFC 7807 规范,用于提供 HTTP 响应中计算机可读的错误详细信息。这部分的详细介绍请点击:官方文档 

  3. 我们需要通过构造函数注入ICompanyRepository,并把它存放在一个只读的字段里面。 

  4. 如果注入的ICompanyRepository的实例为null,那么就抛出一个ArgumentNullException 

  5. 想要返回数据结果,我们需要在Controller里面添加一个Action方法。我暂时把它的返回类型写为IActionResult(详细介绍请点击官方文档)。IActionResult里面定义了一些合约,它们可以代表Action方法返回的结果。 

  6. 我暂时只想把结果序列化为JSON格式并返回,这里我new了一个JsonResult参考文档),它可以做这项工作。 

 

目前我只做了这几项最基本的工作:创建Controller,注入Repository,创建Action方法并返回结果。下面运行一下看看报了什么错: 

640?wx_fmt=png

这是因为GetCompanies这个Action方法并没有使用属性路由(Attribute Routing)。关于路由这部分,下一篇文章再介绍。 

点击原文查看博客园的博文,主要是里面有文档的链接.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 链表

线性表(顺序表)有两种存储方式:链式存储和顺式存储,顺式存储如数组,其内存连续分配,且是静态分配。链式存储,内存是不连续的,且是动态分配。前一个元素存储数据,后一个元…

波拉契尔数列 C++

题目:写一个函数,输入n, 求斐波那契数列的第n项。 分析:该题有两种实现方式递归或循环。当n比较大的时候f(n)结果也会比较大,故定义的时候可以采用long(int 也行)。递归会有大量的重复计算,而循环可以把f(n-1)和f(n-2)…

Deepin 下 使用 Rider 开发 .NET Core

国产的 Deepin 不错,安利一下。Deepin 用了也有一两年,也只是玩玩,没用在开发上面。后来 Win10 不太清真了,就想着能不能到 Deepin下撸码。要搞开发,首先少不了 IDE,VS2019 用不来,Vs Code 太复…

[视频演示].NET Core开发的iNeuOS物联网平台,实现从设备PLC、云平台、移动APP数据链路闭环...

此次我们团队人员对iNeuOS进行了全面升级,主要升级内容包括:(1) 设备容器增加设备驱动,包括:西门子(S7-200smart、S7-300、S7-400、S7-1200、S7-1500)、三菱(FxSerial…

选择开源项目什么最重要?

开发人员在决定是否使用某个开源项目时考虑到的最重要事项是什么?代码质量?安全性?好的文档?上述因素都很重要,但根据 Tidelift 和 The New Stack 的联合调查,控制着开源项目的开源许可证才是最需要考量的因…

居然不知道和的区别?

前言那年刚找工作那会,就碰到过这么一个简单的题目“&和&&的区别” 那时知识面窄,大概也就知道1.都是作为逻辑与的运算符。2.&&具有短路功能,计算出前者false,就不需计算后者的true or false。后来在微信群里…

【DevOps进行时】自动化测试之单元测试

在DevOps建设中,主流的测试分层体系可以分为单元测试、接口测试和界面测试。Google曾提出一个经验法则:70%的小型测试,20%的中型测试,10%大型测试。当然,这个比例不是确定的,不同类型的项目,测试…

Zongsoft.Data 发布公告

很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后,今天正式宣布对外推广。它是一个类 GraphQL 风格的 ORM(Object/Relational Mapping) 数据访问框架。又一个轮子?在很长时间里,.NET 阵营似乎一直缺乏一个被普遍…

使用 .NET Core模板引擎创建自定义的模板和项目

本文要点.NET CLI 包含了一个模板引擎,它可以直接利用命令行创建新项目和项目项。这就是“dotnet new”命令。默认模板集涵盖了默认控制台和基于 ASP.NET 的应用程序以及测试项目所需的基本项目和文件类型。自定义模板可以创建更加有趣或定制化的项目和项目项&#…

.NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

时间真快,转眼今年又要过去了。回想今年,依次开源发布了Colder.Fx.Net.AdminLTE(254Star)、Colder.Fx.Core.AdminLTE(335Star)、DotNettySocket(82Star)、IdHelper(47Star),这些框架及组件都是本着以实际出发,实事求是的态度&…

.Net开发3年,应聘大厂惨遭淘汰,如何翻身打脸面试官?

(设计师忘记了,这里还有个双十一福利课,还能1元秒杀!)

面对金九银十铜十一你真的准备好了吗?

作者:回首笑人间,高级Java工程师一枚,热爱研究开源技术,架构师社区合伙人!前言:又是一年一度的金九银十跳槽季,回首在经历了半个月的求职奔波后,终于又能安稳的静下心来敲代码了&…

深入理解二叉搜索树

什么是二叉搜索树? 顾名思义,一颗二叉搜索树是基于二叉树来组织的,它包括许多动态集合操作(Search,MiniNum, MaxiNum, Prodecessor, Successor, Insert 和Delete等)。二叉搜索树上的基本操作所花费的时间与…

深入理解堆(最大堆,最小堆及堆排序)

基本概念: 1、完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。 2、满二叉树:满二叉树是一种特殊的的完全二叉树,所有层的结点都是最…

王炸吐血整理60个Redis面试题,全网最全了

1.Redis 是一个基于内存的高性能key-value数据库。 2.Redis相比memcached有哪些优势: memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型redis的速度比memcached快很多redis可以持久化其数据3.Redis是单线程 redi…

H.266 参考软件VTM下载和安装

1、下载安装cmake ,下载地址https://cmake.org/。 安装后打开控制面板-系统-高级系统设置-环境变量-PATH-编辑-输入cmake.exe的路径即可。 2、如果你之前(HEVC)时已经下载好了SVN,直接在桌面点击右键SVNcheckout,出来…

VTM编码结构框架

VTM流程差不多就是这样子的啦,后续会继续补充,由于能力有限,如有错误,欢迎指正。在后面会进一步分析每一个函数,并分析流程的细节。

AspNetCore应用注意这一点,CTO会对你刮目相看

背景已经有很多文章记录了Web程序中采用异步编程的优势和.Net异步编程的用法, 异步编程虽然不能解决查询数据库的瓶颈, 但是利用线程切换,能最大限度的弹性利用工作线程, 提高了web服务的响应能力。????9012年了,再…

ASP.NET Core如何限制请求频率

ASP.NET Core如何限制请求频率,为了防止恶意请求,我们往往会对接口请求的频率做限制,比如请求间隔,一段时间内请求的次数,针对部分IP做出不同的限制策略如何去限制请求频率不需要我们去实现,用上AspNetCore…

从AppDomain迁移到AssemblyLoadContext

AssemblyLoadContext基本上AssemblyLoadContext是AppDomain的继承者,它提供相同而且更多的功能-除了安全边界(隔离)。最小的安全边界是进程,因此你将需要使用进程间通信来正确隔离数据和代码执行。官网文档中提到Appdomain已经过时…