Asp.net core 学习笔记 ( Web Api )
更新 : 2020-02-21
前端传值的时候, 如果没有传某些属性该怎么处理比较好呢?
假设要传一个 class 里面有一个 int 属性
如果我们跑默认的配置的话, 在 controller 会收到 value 0
web api 在转换 json 时会弄好默认值.
但如果 string, object, list 则不会处理, 会返回 error
c# 8 之后, 如果 string, object, list 不是 nullable 的话,我们是需要设置默认值的。
目前我的规范是, string 没给就放 "" 作为默认值, list = new List 作为默认, object 就报错.
所以除了 object 基本上其它的都可以有默认值。
最近对 1-1 的 table 有了一个新规定,就是尽可能要有,所以我 object 这种情况下也可以 default value 给它哦.
.
更新: 2019-12-13
incomplete JSON response
多半是因为 response 了 entity, 然后被循环引用搞砸了.
解决方案是 startup 调 config
services.AddMvc().AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
但更好的是不要返回 entity, 因为返回值应该是 DTO 才对. 要经过处理丫, 权限丫
更新 : 2019-06-03
web api 返回 json 的情况下默认会把属性 PascalCase 变成 camelCase 很贴心哦.
如果你不喜欢可以修改它
services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver())
但是这个对 odata 的 response 是没有影响的哦, odata 不会自动 camelCase 的.
asp.net core 把之前的 webapi 和 mvc 做了结合.
mvc 既是 api.
但是后来,又发现, api 确实有独到之处,所以又开了一些补助的方法.
namespace Project.Controllers
{
public class PostForm
{
[Required]
public IFormFile file { get; set; }
} [ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private DB Db { get; set; }
public ProductsController(DB db)
{
Db = db;
} [HttpGet]
public ActionResult<List<Product>> Get()
{
return Ok(Db.Products);
} [HttpGet("{Id}")]
[ProducesResponseType()]
[ProducesResponseType()]
public ActionResult<Product> GetById(string Id,[Required] string code)
{
return NotFound();
} [HttpPost]
[ProducesResponseType()]
public async Task<ActionResult<Product>> Post(Product product)
{
Db.Add(product);
await Db.SaveChangesAsync();
return Ok(product);
} [HttpPost("upload")]
[ProducesResponseType()]
public ActionResult<string> Upload([FromForm] PostForm form)
{
return Ok("filename");
}
}
}
继承的是 ControllerBase 而不是 MVC 常用的 Controller. Controller 会继承 ControllerBase
[ApiController], 使用标签 ApiController 会开启自动 model valid 检查, 自动 binding FromBody, FromQuery 等, 但 FromForm 还是要自己写哦 (默认 api 都是 json 的嘛) , 如果你担心它的智能,也可以完全自己写.
或则把它某个智能关掉 . Add the following code in Startup.ConfigureServices after services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
:
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressConsumesConstraintForFormFileParameters = true;
options.SuppressInferBindingSourcesForParameters = true;
options.SuppressModelStateInvalidFilter = true;
});
[HttpPost("nextSegment")] 通过 http method 标签,我们可以很容易的写各做方法, 比如 get,post,put,delete, route 功能也包在内了真好呢.
[ProducesResponseType] 这个标签主要功能是为了方便做 document, 配合 ActionResult<T> 泛型, 我们可以简单的表示正常情况下的返回,其余不正常情况使用 ProducesResponseType 来表示.
通常是 404, 400 应该没有别的了吧.
Asp.net core 学习笔记 ( Web Api )的更多相关文章
- 【ASP.NET Core学习】Web API
这里介绍在ASP.NET Core中使用Web API创建 RESTful 服务,本文使用VSCode + NET Core3.0 创建简单Rest API 格式化输出 JSON Patch请求 Op ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(一)-环境介绍
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(一)-环境介绍 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object 版权声明:本文为博主原创文章,未经博主允许不得转载. ht ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- 使用 ASP.NET Core MVC 创建 Web API(一)
从今天开始来学习如何在 ASP.NET Core 中构建 Web API 以及每项功能的最佳适用场景.关于此次示例的数据库创建请参考<学习ASP.NET Core Razor 编程系列一> ...
- ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项
前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...
- 从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...
- 从头编写 asp.net core 2.0 web api 基础框架 (3)
第一部分:http://www.cnblogs.com/cgzl/p/7637250.html 第二部分:http://www.cnblogs.com/cgzl/p/7640077.html 之前我介 ...
随机推荐
- java配置xml报cvc-complex-type.2.3: 元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”
今天测试es-job的时候,启动的时候报了标题中的错误, 经查,原因有二: 一:从网上粘贴过来字符没有对应上,所以子元素property报错,将文字复制到Notepad++等编辑工具,转为UTF-8编 ...
- j2ee分布式缓存同步实现方案dlcache
现成的分布式K/V缓存已经有很多的实现,最主要的比如redis,memcached,couchbase.那为什么我们还要自己去实现呢,在我们解决了分布式系统下大量rpc调用导致的高延时后,我们发现很多 ...
- Linux使用退格键时出现^H + Tab键命令补全失效/方向键失效 + ls文件夹和文件没有颜色
删除问题 安装kalilinux使用普通用户的的时候按退格键无法实现删除功能 解决的办法有两个 一改变快捷键: 使用Ctrl+Backspace组合键可以实现删除功能 ctrl + backspace ...
- Linux基础笔记——RAID
关于RAID RAID0:理论上来说一个有n块磁盘组成的raid0,它的读写是单个磁盘性能的n倍,具有低成本,高性能,低安全性,可用于可靠性不高的应用,如:视频.音频.临时数据存储等 RAID1:也称 ...
- Codeforces 822C Hacker, pack your bags! - 贪心
It's well known that the best way to distract from something is to do one's favourite thing. Job is ...
- ERROR 3009 (HY000): Column count of mysql.user is wrong. Expected 45, found 42. Created with MySQL 50560, now running 50725. Please use mysql_upgrade to fix this error.
centos7.5 登入mysql,进行授权报错 问题: mysql> grant all privileges on *.* to 'lvhanzhi'@'%' identified by ' ...
- topcoder srm 694 div1 -3
1.给出$n$个数字,将其分成三个非空的组,每组的权值为该组所有数字的抑或.选择一种分法使得三组的权值和最大? 思路:记录前两组的权值且三组有没有数字时第三组的值.(当前两组的值知道时第三组的权值是确 ...
- Python3 tkinter基础 Checkbutton anchor for生成多个控件并西对齐
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- outlook使用笔记
使用电子邮件客户端(pc端)软件, 确实是不得已. 出于某些考试/了解的目的? 现在使用 在线/网页端电子邮件 确实要好得多, 方便得多了. outlook和其他软件都是 设置的 "帐户 a ...
- (zhuan) Recurrent Neural Network
Recurrent Neural Network 2016年07月01日 Deep learning Deep learning 字数:24235 this blog from: http:/ ...