码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • .Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute


    合集 - .NET(21)
    1..NET Core 环境搭建2022-03-162..Net Core IOC DI(依赖注入)2022-03-163..NET Core 读取配置技巧 - IOptions 接口2022-05-254..Net Core 依赖注入(IOC) 一些简单的使用技巧2022-05-065..Net Core 可为Null的类型2022-04-026..Net Core 配置文件 appsettings.json2022-03-257..NET 反向代理-YARP 部署Https(SSL)2022-09-218..NET 反向代理-YARP 根据域名转发2022-09-219..NET 7 来了!!!2022-09-1910..NET 反向代理-YARP2022-09-0711..Net Core 配置文件读取 - IOptions、IOptionsMonitor、IOptionsSnapshot2022-09-0212..NET Core 实现后台任务(定时任务)Longbow.Tasks 组件(三)2022-07-2313..NET Core 实现后台任务(定时任务)BackgroundService(二)2022-07-1314..NET Core 实现后台任务(定时任务)IHostedService(一)2022-07-08
    15..Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute2022-10-07
    16..NET 反向代理 YARP 代理 GRPC2022-09-2817..Net 7 C#11 原始字符串2022-09-2618..NET 反向代理 YARP 跨域请求 CORS2022-09-2619..NET 反向代理 YARP 自定义配置提供程序(Configuration Providers)2022-09-2520..NET 反向代理 YARP 通过编码方式配置域名转发2022-09-2421..NET 部署 多域名 Https(SSL)通过代码方式2022-09-23
    收起

      在日常后端Api开发中,我们跟前端的沟通中,通常需要协商好入参的数据类型,和参数是通过什么方式存在于请求中的,是表单(form)、请求体(body)、地址栏参数(query)、还是说通过请求头(header)。

      当协商好后,我们的接口又需要怎么去接收这些数据呢?很多小伙伴可能上手就是直接写一个实体,作为 api 函数的入参,然后就愉快的编写代码了;前端调用时却报 400 错误,可以说是一脸懵;当然,很多情况下这样写是不会报错的,因为我们需要的数据,往往只会存在于一个地方,就是请求体(body),而我们的 .Net Core 又足够的强大,导致本不严谨的操作却不会发生 bug。

      而当出现这样的一个需求的时候,小伙伴们思考一下应该怎么做:一个 Post 请求,参数分别放在了 地址栏(url?key=#$!fsefes&token......)、和请求体中( {“name”:"小明",""sex:"男"} );像这个需求我们的后端接口应该怎么写呢?下面我们尝试一下不严谨的做法。

      首先我们定义一个实体 Info

    复制代码
    public class Info
    {
        public string? Name { get; set; }
    
        public string? Sex { get; set; }
    }
    复制代码

      而又因为 Url 中的参数数量比较多,常规的一个做法,也是定义一个实体类去接收

    复制代码
    public class Parameters
    {
        public string? Key { get; set; }
    
        public string? Token { get; set; }
    
        public string? Time { get; set; }
    }
    复制代码

      然后编写 Post 接口函数,非常简单

    [HttpPost]
    public int Post(Parameters parameters, Info info)
    {
        return 200;
    }

      我们直接 F5 把项目跑起来,你会发现,程序报错了,因为程序分不清谁跟谁了

     

       而错误提示非常的清楚,你要使用 FromQuery 特性,现在我们给参数加上这个特性

    [HttpPost]
    public int Post([FromQuery]Parameters parameters, Info info)
    {
        return 200;
    }

      再次启动后,代码不报错了,我们看一下 swagger

      由于我们给 parameters 参数加上了 FromQuery 的特性,所以程序就不懵了

     

      下面给大家说下 FromBody FromForm FromQuery FromHeader FromRoute 的区别

      FromBody:当请求的 content-type 为 application/json 时,可以不加上这个特性,因为当入参类型为实体类时,系统默认从请求体(body)中获取数据,在这里建议大家加上;

      FromForm:当请求属于表单提交,也就是 content-type 为 application/x-www-form-urlencoded,则必须给参数加上 FromForm 特性,否者会报 400 错误;

      FromQuery:获取地址烂参数,当接口参数是一个实体类时,建议必须加上该特性;

      FromHeader:获取请求头参数;

      FromRoute:获取路由参数,这个可能有些小伙伴会很疑惑,我贴出个代码大家就懂了:

    复制代码
    [HttpPost("{id}")]
    public int Post([FromRoute]string id, [FromQuery]Parameters parameters, Info info)
    {
        return 200;
    }
    复制代码

       好了,本文到此结束,感谢大佬们的观看,谢谢!

    原文链接:https://www.cnblogs.com/ysmc/p/16758995.html

  • 相关阅读:
    力扣:165. 比较版本号(Python3)
    黑马JVM总结(十八)
    STM32 裸机编程 04 - Makefile 构建自动化
    学习和认知的四个阶段,以及学习方法分享
    二叉树递归遍历-01
    2022/8/11 状压+矩阵快速幂
    FTC局部路径规划代码分析
    pytorch之文本篇项目——聊天机器人(一)数据预处理
    ETCD备份与恢复
    Google Earth Engine(GEE)——导出的影像资产会改变原有的分辨率大小
  • 原文地址:https://www.cnblogs.com/ysmc/p/16758995.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号