更新 : 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 应该没有别的了吧.

最新文章

  1. 解决开启服务器防火墙导致ftp不能连接的问题
  2. 【COGS 254】【POI 2001】交通网络图
  3. Leetcode 70 Climbing Stairs 递推
  4. 能源项目xml文件 -- app-init.xml
  5. qt里标识操作系统的宏
  6. codeforces 432D Prefixes and Suffixes
  7. 稠密图(邻接矩阵),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)
  8. 飘逸的python - zlib压缩存到数据库
  9. 在虚拟机上配置linux lab的相关经验
  10. jQuery 属性操作 - attr() 方法
  11. 13. ZooKeeper最佳实践
  12. javase--day_01
  13. USB接口禁用与启用
  14. HTML学习笔记Day11
  15. K - Super A^B mod C
  16. 二:python 对象类型概述
  17. Java通过遍历sessionId获取服务器所有会话session
  18. StreamSets学习系列之StreamSets是什么?
  19. router之switch
  20. pycharm中python模板代码自动生成

热门文章

  1. epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
  2. [VS] - &quot;包含了重复的“Content”项。.NET SDK 默认情况下包括你项目中的“Content”项。
  3. C# ms speech文字转语音例子
  4. php 输出缓存,每秒打印一个数字
  5. 使用Navicat for MySQL添加外键约束
  6. 2018年11月16日 我和SB交流有代沟-继续字符串4
  7. MongoDB 创建索引及其他
  8. linux下关于mysql的命令的用法
  9. Python hasattr() 函数 // python中hasattr()、getattr()、setattr()函数的使用
  10. 【做题】arc080_f-Prime Flip——转换、数论及匹配