前言

前面简单介绍了一下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. 内部UI自动化测试培训之python基础

    这个文档的由来是公司内部UI自动化测试培训的资料.部门为了减少测试工作量,准备做UI自动化测试.我写python,其他同事都是java,所以python基础和UI自动化测试selenium的培训就由我 ...

  2. XAF Number(编号)

    前言 编号在各类系统中都会存在,同时它还会根据业务场景的不同,会有不同的生成规则.XAF提供了一个编号生成助手(DistributedIdGeneratorHelper),它能在多并发的情况下,生成一 ...

  3. Zabbix“专家坐诊”第192期问答汇总

    问题一 Q:请问下,客户机snmptrap发告警为啥server web收不到,关键是snmptrap日志已经收到,zabbix server配置以及开启snmptrap=1 snmptrap=var ...

  4. vscode 切换页签快捷键 自定义 Ctrl+H Ctrl+L 左右切换

    今天需要整理写资料,需要在多个页签之间切换,发现自定义了快捷. 好久不用这个快捷键,都快忘了. vscode 切换页签快捷键 自定义 Ctrl+H Ctrl+L 左右切换

  5. Apollo3 Blue SoC 和 Apollo3 Blue Plus SoC的区别

    一 芯片简介 1.简介 Apollo3 Blue系列SoC解决方案代表了超低功耗设计的巨大飞跃,其运行模式和睡眠模式下的功耗数值均十分出色,并且具有高性能的处理引擎. Apollo3Blue器件提供了 ...

  6. -Dmaven.multiModuleProjectDirectory system propery is not set解决方案

    myeclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery ...

  7. oracle错误之未知的命令开头imp忽略了剩余行解决方案

    现象:执行imp命令如下: imp username/password@orcl full=y  file=C:\optimove.dmp ignore=y  解决方案: imp 命令是在dos提示符 ...

  8. C++ 派生类对象的构造与析构过程

    C++ 派生类对象的构造与析构过程 因为基类的成员变量和派生类的成员变量在内存中的连续的(下面程序会验证这一点),如下图所示: 所以构造派生类对象的时候,构造成员变量的过程就像入栈一样: 那么很自然, ...

  9. linux使用hostapd+dnsmasq管理多张网卡,搭建dns服务器,并发射wifi热点(支持360wifi等等)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文发布于 2015-03-03 18:37:39 ...

  10. 面试官:小伙子,能聊明白JMM给你SSP!我:嘚吧嘚吧一万字,直接征服面试官!

    写在开头 面试官:小伙子,JMM了解吗? 我:JMM(Java Memory Model),Java内存模型呀,学过的! 面试官:那能给我详细的聊一聊吗,越详细越好! 我:嗯~,确定越详细越好?起码得 ...