其实解决办法很简单,就是POST请求的时候,来自实体的参数,content-type:application/x-www-form-urlencoded情况下,是默认按照键值对来解析的,比如paramname=paramvalue的形式,但是这里有个隐形的要求就是frombody的参数只能是一个,如果多个参数被修饰为frombody,编译的时候会报错,也就是意味着,只要是frombody修饰过的参数,其名字并不重要,而再http请求的body部分,直接忽略起参数名,从=开始写参数内容,那么就可以直接被读取为string类型。如果没看懂,请看下面的截图示范:

上图是模拟的一个http请求,中图是服务器端代码,下图是刚刚执行完之后插入到数据库的值,

其中关注点有3处,

1,服务器端代码可以看出是需要传递两个参数的,都是string类型的参数,不同的是一个从url中抽取,另一个从body中抽取,url中已经写入了一个参数,后面没有加&去跟上另一个参数,

2,数据内容其实就是body中要填写的内容,编码形式默认是utf-8,body中上传的内容中,不能是和url中一样的键值对,key=value的形式并不认可,相反,直接从=开始,后面的全部作为一个frombody的sting类型的参数进行传递,如果开头不是=号,那么服务器上的message将会是null空值,

3,数据内容,也就是body内容的长度参数,是必须要有的,在http1.1以上中,如果使用post,并且body中非空时,必须要有content-length的标头,并且,如果字符中存在汉字,那么再utf-8编码模式下,其长度应该采用编码后的字符长度,而不是编码前的长度,也就是byte数组的长度,如果不信可以亲自手写一次进行确认。

当然网上对于frombody参数为空值的情况,有很多人都建议自己做一个读入参数的类去处理,或者将string类型变为object去接收的,然后再抓化成比如json的形式去接收的,但是content-type也要做改变为text/json等,我觉得还是比这种方式要复杂一些,完全不如这种方式来的方便简单。

顺便打个广播吧:https://shop122721410.taobao.com/ 是我的淘宝店,如果有什么问题,可以随时找我,一般都在线的。

关于ASP.NET中WEBAPI中POST请求中FromBody修饰的string类型的参数服务器端获取不到值FromBody空值的简单解决方法的更多相关文章

  1. asp.net core webapi处理Post请求中的request payload

    request payload的Content-Type实际上是text/plain的,如果请求的 Content-Type 为 application/json,这将导致415 Unsupporte ...

  2. SQL2008无法附加数据库,提示“无法显示请求的对话框”(nColIndex实际值是-1)图文解决方法

    SQL2008无法附加数据库,提示“无法显示请求的对话框”(nColIndex实际值是-1)图文解决方法 SQL2008无法附加数据库,提示“无法显示请求的对话框”(nColIndex实际值是-1)图 ...

  3. javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url

    javaweb项目中有很多场景的路径客户端的POST/GET请求,服务器的请求转发,资源获取需要设置路径等这些路径表达的含义都有不同,所以想要更好的书写规范有用的路径代码 需要对路径有一个清晰地认知 ...

  4. MVC中如何避免POST请求中出现的重复提交

    使用惯了Asp.Net的服务器控件了, 突然转到MVC框架上来遇到这么个问题. 比如说网速慢的时候, 用户频繁的点击提交按钮, 或者是按F5刷新页面等等.解决方法很简单. 解决方案 1. 在页面生成时 ...

  5. Android 在Fragment中执行onActivityResult不被调用的简单解决方法

    在Android开发中,我们经常会用到FragmentActivity下嵌套多个Fragment,但是在开发过程中会发现在嵌套的Fragment中使用onActivityResult回调方法没有被执行 ...

  6. java中的堆、栈、常量池以及String类型的两种声明

    参考自http://blog.sina.com.cn/s/blog_798b04f90100ta67.html http://www.cnblogs.com/fguozhu/articles/2661 ...

  7. IE中float元素如果同时设置了margin值,此时margin的值会变为双倍的解决方法

    IE中float元素如果同时设置了margin值,此时margin的值会变为双倍, 解决办法: 是在该元素中加入display:inline.

  8. C#中往数据库插入空值报错解决方法

    C#中的NUll于SQL中的null是不一样的, SQL中的null用C#表示出来就是DBNull.Value 在用C#往数据库里面插入记录的时候, 可能有的字段你不赋值,那么这个字段的值就为null ...

  9. SpringBoot中Post请求提交富文本数据量过大参数无法获取的问题

    yml增加配置 # 开发环境配置 server: tomcat: max-http-form-post-size: -1

随机推荐

  1. java基本数据类型和包装类之间的区别

    1.声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间: 2.存储方式及位置不同,基本类型是直接将变量值存储在堆栈中,而包装类型是将对象放在堆中,然后通过引用 ...

  2. java封装 redis 操作 对象,list集合 ,json串

    /** * 功能说明: * 功能作者: * 创建日期: * 版权归属:每特教育|蚂蚁课堂所有 www.itmayiedu.com */package com.redis.service; import ...

  3. Kafka 系列(三)—— Kafka 生产者详解

    一.生产者发送消息的过程 首先介绍一下 Kafka 生产者发送消息的过程: Kafka 会将发送消息包装为 ProducerRecord 对象, ProducerRecord 对象包含了目标主题和要发 ...

  4. [Spring cloud 一步步实现广告系统] 21. 系统错误汇总

    广告系统学习过程中问题答疑 博客园 Eureka集群启动报错 Answer 因为Eureka在集群启动过程中,会连接集群中其他的机器进行数据同步,在这个过程中,如果别的服务还没有启动完成,就会出现Co ...

  5. 【畅通工程 HDU - 1232 】【并查集模板】

    并查集讲解和模板 有一个博文对此分析的很透彻,附链接 为避免原链接失效,现摘录如下: 为了解释并查集的原理,我将举一个更有爱的例子. 话说江湖上散落着各式各样的大侠,有上千个之多.他们没有什么正当职业 ...

  6. 高级脚本进阶—使用case的多功能选择性脚本

    应用场景: 在应用脚本决解实际的运维问题时,单功能脚本有很多的不同应用环境,如不同的运行环境,不同的系统版本等,这时,就需要对脚本的功能进行选择,一个脚本实现多功能多版本系统的维护,以减少沟通成本,而 ...

  7. 从0开始学Git——Git的协同操作

    环境: test_git 目录下有个my-project 版本库 所有命令都在test_git目录下执行 本地协同操作 从远端仓库检出代码,或者克隆一个已有的版本库 拷贝一个已有的仓库 #格式: gi ...

  8. Maven项目添加ojdbc8

    1.找到Oracle中的ojdbc8,它的位置在Oracle客户端 2.找到它的位置后,把你放ojdbc8的位置复制,改如下代码"D:\ojdbc8.jar"为你的ojdbc8位置 ...

  9. LeetCode115不同的子序列

    题目说明在这里就不贴出来了,相信打开这篇文章的小伙伴们肯定都是在刷LeetCode的. 一开始我的想法是dfs+回溯,结果运行超时,一开始我就觉得可能会超时,结果不出所料[手动笑哭]. 后来我想了下d ...

  10. 从零开始搭建Java开发环境第二篇:如何在windows10里安装MySQL

    1 下载安装包 1.1 压缩包 https://dev.mysql.com/downloads/mysql/ [外链图片转存失败(img-oesO8K09-1566652568838)(data:im ...