asp.net.core学习笔记1:swagger的使用和webapi接收Jobject对象
环境:asp.net.core 3.1 (一觉醒来官方已经不推荐3.0了,于是没有任何core经验,也只能开始了3.1的开发学习)
由于现有项目前后端分离、微服务化日趋流行,所以上手不采用web应用(razor页面,mvc),直接使用webapi,也许后续的项目会采用SignalR做实时数据。回归正题,使用webapi常用的辅助工具swagger必须有姓名,好处就不说了,谁用谁知道。
一、swagger的使用。网上相关教程(包括汉化等)较多,只简述基本步骤,提供一些小技巧应用。
1.在nuget管理器中添加Swashbuckle.AspNetCore包引用;
2.添加service配置。在startup.cs中在ConfigureServices方法中添加swagger的服务配置代码。注意配置xml的路径和名称,需要在项目属性“生成”中配置名称和地址。
1 services.AddSwaggerGen(c=> {
2 c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My API", Version = "v1" });
3 c.IncludeXmlComments(System.IO.Path.Combine(System.AppContext.BaseDirectory, "API.xml"));
4 });
3.添加swagger配置。在startup.cs中Configure中添加代码配置应用程序。swagger的endpoint常规配置即可。
小技巧:将swagger的路由前缀置为空,并将调试的启动路径设置为index.html。由于是前后端分离,后端服务中不提供界面,设置为index.html为启动路径,可以在调试的第一时间打开swagger界面。
1 app.UseSwagger();
2 app.UseSwaggerUI(c =>
3 {
4 c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
5 c.RoutePrefix = "";
6 });
二、Webapi接收jobject对象。json在api中的使用非常常见,但是core在api的请求中是不支持弱类型对象的,可以确定的是支持自定义类型和基础数据类型。通常使用post发送一个json,如果json是api已经定义好的强类型,那么core可以将json直接反序列化成自定义类型。但如果json的内容不固定,或不便于定义强类型,我们通常选择是弱类型jobject,但是很遗憾的是3.0之前是不支持json反序列化jobject的。(3.0之前的core通常自定义一个模型绑定构建器和模型绑定方法,参考资料3)
3.0之后添加了对jobject的优化支持,引用包 Microsoft.AspNetCore.Mvc.Newtonsoft,并在配置服务的时候对controller添加json的支持即可,如下:
services.AddControllers().AddNewtonsoftJson();
然后便可以在controll中添加post的api。
有兴趣的同志可以研究参考资料3,看看core1.1是如何实现模型绑定的(实践过程中有瑕疵,不建议采用这种古早的方法)。
参考资料:
1.https://lbadri.wordpress.com/2014/11/23/web-api-model-binding-in-asp-net-mvc-6-asp-net-5/
3.https://www.cnblogs.com/showmu/p/6264950.html
最新文章
- Spring Remoting: Hessian--转
- 【转】深入理解Java内存模型(三)——顺序一致性
- Spring 4 支持的 Java 8 特性
- 理解JDK1.5的自动装箱拆箱
- HDU 1019 Least Common Multiple【gcd+lcm+水+多个数的lcm】
- Java_并发工具包 java.util.concurrent 用户指南(转)
- .net 相关性能计数器丢失问题解决方案
- [PHP] 算法-二叉树的子结构判断的PHP实现
- VMware NAT 设置原理
- ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序;ASP.NET WebForm和MVC总体请求流程图
- ASP 基础一 网站开发 初步认识
- 微服务(Microservices )简介
- ini文件读写
- learning ddr3 protocol
- Html----表单元素
- C++ const方法及对象
- git reset与git revert比較
- 第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中
- java-信息安全(十一)-非对称加密算法ECC以及ECDSA签名
- 20155229 2016-2017-2 《Java程序设计》第八周学习总结
热门文章
- P1605迷宫——题解
- 一种面向业务配置基于JSF广播定时生效的工具
- 克拉玛依初赛-wp
- angular2-qrcode 引用报错 error NG8001: 'qr-code' is not a known element:
- 【FAQ】申请运动健康服务验证环节常见问题及解答
- 使用 NineData 高效编写 SQL
- ES6 01 简介
- 高效、优雅的对象copy之MapStruct入门到精通,实战踩坑版
- 视觉SLAM:滑动窗口
- Hugging Face 每周速递: 扩散模型课程完成中文翻译,有个据说可以教 ChatGPT 看图的模型开源了