net core 模型绑定与之前版本的不同-FromBody 必须对应Json格式
之前有一个用于七牛上传图片的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格式的更多相关文章
- 本地化ASP.NET core模型绑定错误消息
默认错误消息: MissingBindRequiredValueAccessor A value for the '{0}' property was not provided. MissingKey ...
- 理解ASP.NET Core - 模型绑定&验证(Model Binding and Validation)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 模型绑定 什么是模型绑定?简单说就是将HTTP请求参数绑定到程序方法入参上,该变量可以是简单类 ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET Core MVC 模型绑定用法及原理
前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...
- ASP.NET Core MVC/WebAPi 模型绑定探索 转载https://www.cnblogs.com/CreateMyself/p/6246977.html
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- 【转】ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- 【ASP.NET Core】MVC模型绑定——实现同一个API方法兼容JSON和Form-data输入
在上一篇文章中,老周给大伙伴们大致说了下 MVC 下的模型绑定,今天咱们进行一下细化,先聊聊模型绑定中涉及到的一些组件对象. ------------------------------------- ...
- ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定
原文:Model Binding 作者:Rachel Appel 翻译:娄宇(Lyrics) 校对:许登洋(Seay).何镇汐 模型绑定介绍 ASP.NET Core MVC 中的模型绑定从 HTTP ...
- asp.net core系列 45 Web应用 模型绑定和验证
一. 模型绑定 ASP.NET Core MVC 中的模型绑定,是将 HTTP 请求中的数据映射到action方法参数. 这些参数可能是简单类型的参数,如字符串.整数或浮点数,也可能是复杂类型的参数. ...
随机推荐
- Educational Codeforces Round 3 E. Minimum spanning tree for each edge 最小生成树+树链剖分+线段树
E. Minimum spanning tree for each edge time limit per test 2 seconds memory limit per test 256 megab ...
- P3146 [USACO16OPEN]248 & P3147 [USACO16OPEN]262144
注:两道题目题意是一样的,但是数据范围不同,一个为弱化版,另一个为强化版. P3146传送门(弱化版) 思路: 区间动规,设 f [ i ][ j ] 表示在区间 i ~ j 中获得的最大值,与普通区 ...
- MD5加密与Hash加密
一.Md5加密 MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1个字 ...
- python3.7.2 pip 出现locations that require TLS/SSL异常处理方法
centos7安装python3.7.2后,运行 pip3 install tornado 会报错 [root@localhost ~]# pip3 install tornado pip is co ...
- 微信小程序 数据绑定方式
与vue不同,在微信小程序中,js的数据和前端显示的数据是单数据流,也就是说,js里边的数据变了(通过setData),前端能立刻显示.但如果前端数据变了,js中的变量不能改变. 这个相比传统的前端已 ...
- 关于oracle函数listagg的使用说明
做项目的过程中遇到过一个这样的需求,在“用户查询”前台加一个字段“用户角色”,要将用户的所有角色查询出来放到一个字段中,角色之间用“,”分隔. 发现一个办法是使用Oracle的listagg方法. W ...
- anusplina 4.36版本使用提示 说明
1),必须要注意的是,你生成的dat文件中,第一列必须是气象站点编号:第二列必须是经度数值,而且是投影坐标下,以 米 为单位:第三列必须是纬度了:第四列必须是海拔了:之后就是你自己的数据,比如平均温度 ...
- 《剑指offer》第四十九题(丑数)
// 面试题49:丑数 // 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到 // 大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7. ...
- 学习笔记20—MATLAB特殊函数
1.qfunc就是Q函数 2.mae(平均绝对误差)函数,mae(abs(A-B)) 3.Z = zscore(x) 等价于 Z=(X-repmat(mean(X),57,1))./repmat(st ...
- 设计一个带有getmin功能的栈,保证时间复杂度在O(1)
2017-06-22 20:56:10 需要得到最小值,最简单的思路就是遍历一遍求出最小值.但是这样的时间复杂度会是O(n),不满足O(1)的要求.于是想到在建立一个栈来保存最小值. 具体操作是建立 ...