前言

前面简单介绍了一下restfulapi是什么东西,那么我们应该在.net core 中如何实现呢?或者说该怎么做才能有这个restful api呢?

正文

幸运的是.net core帮助我们实现了,restfulapi,但是不是强制性的,我们需要加上属性ApiController,表示符合restful api规则。

这个也是非常常用的,那么ApiController有什么特性吗?

1.要求使用属性路由(attribute routing)

2.自动响应400。

3.推断参数的绑定源

4.multipart/form-data 请求推断

5.错误状态的问题详细信息

解释一下,第一个属性路由什么意思呢?

[ApiController]
[Route("api/Companies")]
public class CompaniesController : ControllerBase

就是使用了ApiController就一定要使用Route("api/Companies"),当然他可以放在方法上,也可以放在类上。

这里我们看到有些是这样写的:[Route("api/[Controller]")] 表示使用当前的类Companies作为名字,但是一旦这个类名改变了,那么api 也变了,所以这个可以写死。

第二个自动响应400,这个400是什么意思呢?是客户端传递的参数不正确,不符合后台规则,那么就会自动返回400,这个后面解释。

第三个推断参数的绑定源,这个我们写过的都明白,不解释了。

第四个是什么意思呢?第四个的意思是这样的。

比如谁它自动推断参数的绑定源,但是去哪里获取呢?是去body 里面还是去form-data 里面,还是去url链接上,这都是值得思考的问题。

那么使用这个ApiController,都是从multipart/form-data 中获取,其他的我们可以特殊表面,如下:

第五个可以返回错误详情,这个是这样的,如果错误了会返回一条链接,打开这条链接可以查看到具体错误,这个后面章节会介绍到。

这里给个例子:

[Route("api/Companies")]
[ApiController]
public class CompaniesController : ControllerBase
{ private readonly ICompanyRepository _companyRepository; public CompaniesController(ICompanyRepository companyRepository)
{
_companyRepository = companyRepository ?? throw new ArgumentException(nameof(companyRepository));
}
[HttpGet]
public async Task<IActionResult> GetCompanies(CompanyDtoParameters parameters)
{
var companies = await _companyRepository.GetCompaniesAsync(parameters);
return new JsonResult(companies);
} [HttpGet("{companyId}")]
public async Task<IActionResult> GetCompany(Guid companyId)
{
var company = await _companyRepository.GetCompanyAsync(companyId);
if (company == null)
{
return NotFound();
}
return Ok(company);
}
}

这里有人就奇怪了,不是说好不能写GetCompanies,然后我这里还写呢?

是这样的,如果访问这个api呢,get 请求,访问的是getCompanies 这个方法,但是api是api/Companies。

因为他是get请求,所以会请求到getCompanies,api/Companies 表示的是资源,而不是某个方法,这是要注意的地方。

这里另外一个可能觉得奇怪的地方在于,你看 访问api/Companies 调用GetCompanies 返回为空,而api/Companies/1 调用GetCompany为空的时候返回的404,为啥区别待遇呢?

因为别人在调用api/Companies的时候访问的这个资源为空,那么这个资源里面的东西为空,但是这个壳子还在。

可以这么理解,company 是一张表,表里面是空的表还在,但是如果某条数据不在那么就是这个资源没有找到,看图:

公司一是没有盒子的,也就是说没有容器,找不到就是没有。

后续持续更新。

RestfulApi 学习笔记——.net core入门操作(二)的更多相关文章

  1. 学习笔记-CCS-MSP430F5529[快速入门篇二]

    由于2021的全国电赛延期了,从今天开始打算好好整理一下使用CCS编程的经验,本篇笔记会好好整理一下我备赛期间用CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输入捕获,PWM波输出,UAR ...

  2. hive 学习笔记——表的入门操作和命令

    1.受控表(managed table)包括内部表.分区表.桶表: 1.1.分区表 创建分区表: create table banji(id INT,name STRING) partitioned ...

  3. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  4. Windows phone 8 学习笔记(2) 数据文件操作

    原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...

  5. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  6. RX学习笔记:JavaScript数组操作

    RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...

  7. 树莓派学习笔记——使用文件IO操作GPIO SysFs方式

    0 前言     本文描写叙述假设通过文件IO sysfs方式控制树莓派 GPIO端口.通过sysfs方式控制GPIO,先訪问/sys/class/gpio文件夹,向export文件写入GPIO编号, ...

  8. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  9. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  10. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

随机推荐

  1. Jenkins Pipeline:根据参数设置环境变量

    pipeline { agent any environment { //以上自定义的参数 project = "$params.PROJECT" } stages { stage ...

  2. Redis之数据持久化小结

    一.概述 Redis作为内存型的数据库,虽然很快,依然有着很大的隐患,一旦服务器宕机重启,内存中数据还会存在吗? 很容易想到的一个方案是从后台数据恢复这些数据,如果数据量很小,这倒是一个可行的方案.但 ...

  3. Codeforces Round 922 (Div. 2)(A~D)补题

    A题考虑贪心,要使使用的砖头越多,每块转的k应尽可能小,最小取2,最后可能多出来,多出来的就是最后一块k=3,我们一行内用到的砖头就是\(\frac{m}{2}\)下取整,然后乘以行数就是答案. #i ...

  4. .NET 5 以后的 HttpClient 超时问题

    背景 起因是朋友在使用深信服的 Easy Connect 连接到内网之后,使用 HttpClient 访问对应内网的 API 站点均返回 System.Net.Sockets.SocketExcept ...

  5. k8s资源管理中request和limit的区别

    在 Kubernetes(K8s)中,request和limit是两个重要的概念,用于控制和管理容器的资源使用. Request(请求): request定义了容器启动时需要保证的最小资源量.这表示K ...

  6. 后端基础PHP—PHP表单验证

    后端基础PHP-PHP表单验证 1.PHP表单 2.PHP连接MySQL 一.PHP表单介绍 关于表单 PHP表单,在网页中主要负责采集数据 通俗理解,在银行办业务需要填一张纸质的表,需要向表上填信息 ...

  7. C++ 传递数组引用

    不用额外变量可以在函数中得到数组长度信息,函数的形参声明为数组引用 #include <iostream> using namespace std; void f(int(&a) ...

  8. 05_QT_Mac开发环境搭建

    在不同的Mac环境下,实践出来的效果可能跟本教程会有所差异.我的Mac环境是:Intel CPU.macOS Moterey(12.4). FFmpeg 安装 在Mac环境中,直接使用Homebrew ...

  9. C++ 调用 Python 总结(一)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  10. 阿里云centos Linux系统挂载数据盘操作流程

    这里假设的是已经在阿里云管理后台购买完了新增的硬盘.我们只讲在Linux系统里操作挂载硬盘过程. 一. 环境: 操作系统: Centos 7 二.查看云服务下所有硬盘 使用root账号登录服务器,执行 ...