之前有一个用于七牛上传图片的Callback Url的WebAPI (之前是用.net4.0,运行正常)

代码如下:

        // 七牛CallBack地址,CallbackBody内容name=upload/member/1.jpg&hash=Fn6qeQi4VDLQ347NiRm-RlQx_4O2
public object Post([FromBody]dynamic data)
{
ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
logger.Info("data:" + data.ToString());
int status = -; try
{
string avator_url = data.name;
int startPos = "upload/member/".Length;
string member_id = avator_url.Substring(startPos, avator_url.IndexOf(".jpg") - startPos);
MemberHelper.UpdateAvator(member_id, avator_url);
var json = new { results = new string[], status = };
return json; }
catch (Exception ex)
{
string msg = ex.Message + ex.StackTrace;
logger.Error("\r\n data:" + data.ToString() + "\r\nException:" + msg, ex);
var json = new { results = new string[], status = status, msg = msg };
return json; } }

现在同样的代码在.net Core 却提示 HTTP 415 错误 – 不支持的媒体类型(Unsupported media type)

请参考这篇文章: https://www.cnblogs.com/CreateMyself/p/6246977.html

里面提到 ASP.NET MVC/WebAPi中无论是以表单POST的形式抑或JSON的形式控制器具有绑定都Http请求Body的能力同时数据都会返回给我们,我们不需要做出任何特别的说明

七牛CallBack的URL格式应该是用表单POST的形式(contentType: "application/x-www-form-urlencoded").

.net core mvc 模型绑定,默认的参数绑定类型是FromForm

FromQuery,对应 url 中的 urlencoded string ("?key1=value1&key2=value2")。

FromForm,对应 request content 中的 urlencoded string("key1=value1&key2=value2")。

FromBody,对应 request content 中的 JSON string("{"key1":"value1","key2":"value2"}")。

.NET Core 则严格限制了, Post([FromBody]dynamic data)  这个写法, 必须对应参数类型是JSON格式( contentType: "application/json"),否则会出现415错误

我们可以做的就是写2个方法,无论七牛用那个方法去调用,都能正确返回.

        // 七牛CallBack地址,CallbackBody内容name=upload/member/memberId.jpg&hash=Fn6qeQi4VDLQ347NiRm-RlQx_4O2
[AllowAnonymous]
[HttpPost("updateAvatorJSON")]
public object Post([FromBody]dynamic data)
{
int status = -1; try
{
updateAvator(data.name);
var json = new { results = "", status = 0 };
return json; }
catch (Exception ex)
{
string msg = ex.Message + ex.StackTrace;
var json = new { results = "", status = status, msg = msg };
return json; }
}
[AllowAnonymous]
[HttpPost("updateAvatorForm")]
public object Post(string name, string hash)
{
int status = -1; try
{
updateAvator(name);
var json = new { results = "", status = 0 };
return json; }
catch (Exception ex)
{
string msg = ex.Message + ex.StackTrace;
var json = new { results = "", status = status, msg = msg };
return json; }
}

**********后记---- 在微信小程序wx.request时,再次碰到类似的问题*************

客户端:

    wx.request({
url: url,
method: 'POST',
header: { "Content-Type": "application/x-www-form-urlencoded" },
data: dataParam,
success: function (res) { }})

对应的服务器端代码必须用[FromForm]修饰,不然取不到数据. 因为.net core 默认只找QueryString

 [HttpPost]
public dynamic Post(
[FromForm]string CustomOrderNumber,
[FromForm]int CustomerId
)
{}

------------------------------------------------------------------------------------------------------

如果 客户端用 "Content-Type": "application/json", 则服务器端必须用[FromBody]

------------------------------------------------------------------------------------------------------

服务器端的[FromForm]和[FromBody]不能混用, api接口要么就一个大对象,要么就要把其他的参数放在QueryString里

        public dynamic Post(
string CustomOrderNumber,
int CustomerId,
[FromBody]OrderItemDTO[] Items
)

net core 模型绑定与之前版本的不同-FromBody 必须对应Json格式的更多相关文章

  1. 本地化ASP.NET core模型绑定错误消息

    默认错误消息: MissingBindRequiredValueAccessor A value for the '{0}' property was not provided. MissingKey ...

  2. 理解ASP.NET Core - 模型绑定&验证(Model Binding and Validation)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 模型绑定 什么是模型绑定?简单说就是将HTTP请求参数绑定到程序方法入参上,该变量可以是简单类 ...

  3. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  4. ASP.NET Core MVC 模型绑定用法及原理

    前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...

  5. ASP.NET Core MVC/WebAPi 模型绑定探索 转载https://www.cnblogs.com/CreateMyself/p/6246977.html

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  6. 【转】ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  7. 【ASP.NET Core】MVC模型绑定——实现同一个API方法兼容JSON和Form-data输入

    在上一篇文章中,老周给大伙伴们大致说了下 MVC 下的模型绑定,今天咱们进行一下细化,先聊聊模型绑定中涉及到的一些组件对象. ------------------------------------- ...

  8. ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定

    原文:Model Binding 作者:Rachel Appel 翻译:娄宇(Lyrics) 校对:许登洋(Seay).何镇汐 模型绑定介绍 ASP.NET Core MVC 中的模型绑定从 HTTP ...

  9. asp.net core系列 45 Web应用 模型绑定和验证

    一. 模型绑定 ASP.NET Core MVC 中的模型绑定,是将 HTTP 请求中的数据映射到action方法参数. 这些参数可能是简单类型的参数,如字符串.整数或浮点数,也可能是复杂类型的参数. ...

随机推荐

  1. Centos6.8安装nginx(一)

    在这里对nginx的安装简单的做个记录,后续有时间的话在详细补充. 1.yum安装g++: yum install -y gcc gcc-c++ [enter] 2.下载必需的依赖库:zlib(为了g ...

  2. python3 items() 与 python2 中iteritems()的区别

    在Python2.x中, iteritems() 用于返回本身字典列表操作后的迭代 Python 3.x 里面, iteritems() 方法已经废除了,而 items() 得到的结果是和 2.x 里 ...

  3. phpredis基本操作

    字符串,用于存储变动少的信息 创建对象 $red = Red::create(); 设置值 $red->set('name','张三'); 设置有效期 $red->set('name',' ...

  4. sklearn preprocessing (预处理)

    预处理的几种方法:标准化.数据最大最小缩放处理.正则化.特征二值化和数据缺失值处理. 知识回顾: p-范数:先算绝对值的p次方,再求和,再开p次方. 数据标准化:尽量将数据转化为均值为0,方差为1的数 ...

  5. 如何完整卸载Mysql数据库

    mysql数据库首次安装失败,后来多次安装均失败,原因就是没有完全卸载mysql数据库 那么如何完整卸载MYSQL数据库呢? 介绍mysql数据库完整卸载的方法 完美卸载MYSQL 在管理工具-服务里 ...

  6. 《剑指offer》第五十九题(队列的最大值)

    // 面试题59(二):队列的最大值 // 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如, // 如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小 ...

  7. Qt中的角度转弧度

    在Qt中,qAsin(),qAtan2()等三角函数的返回值是弧度而不是角度,因此要将弧度转化为角度. 弧度=角度*Pi/180 以qAtan()函数为例 qreal qAtan(qreal v) R ...

  8. 解开lambda最强作用的神秘面纱

    我们期待了很久lambda为java带来闭包的概念,但是如果我们不在集合中使用它的话,就损失了很大价值.现有接口迁移成为lambda风格的问题已经通过default methods解决了,在这篇文章将 ...

  9. java ----> 手动编译java项目

    环境: jdk1.8,cmd,notepad++ 创建java工程test,创建文件夹: src classes lib 说明: src 放置.java文件 classes 放置.class文件 li ...

  10. English trip V1 - B 2. May I Help You? 它是多少钱? Teacher:Lamb Key:

    In this lesson you will learn to ask for things in shops  这节课您将学习如何在商店中寻找东西 课上内容(Lesson) 你通常去哪里购物? W ...