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方法参数. 这些参数可能是简单类型的参数,如字符串.整数或浮点数,也可能是复杂类型的参数. ...
随机推荐
- hdu 2108 Shape of HDU 判断是否为凸多边形
Shape of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pro ...
- Java中的long与double的区别
1.long与double在java中本身都是用64位存储的,但是他们的存储方式不同,导致double可储存的范围比long大很多 2.long可以准确存储19位数字,而double只能准备存储16位 ...
- python 移动文件夹
xxx@ddd:~$ mkdir testa testb >>> import shutil >>> shutil.move("/home/xxx/tes ...
- composer require 指定版本
默认 composer require endroid/qr-code 指定版本 composer require endroid/qr-code 1.9.3 # composer require e ...
- javascript AOP(面向切面编程)
var func = function () { console.log("2") } Function.prototype.before = function (beforefn ...
- java线程执行的优先级
1.1 线程的优先级 java 中的线程优先级的范围是1-10,默认的优先级是5.10极最高. 有时间片轮循机制.“高优先级线程”被分配CPU的概率高于“低优先级线程”.根据时间片轮循调度, ...
- MYSQL的基本函数 (加密函数)
AES_ENCRYPT(str,key) 返回用密钥key对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT的结果是一个二进制字符串,以BLOB类型存储 AES_DECRYP ...
- Asp.net core 学习笔记 ( Identity 之 Authentication )
和从前的 identity 区别不是很大. 从 2.1 开始 vs 模板的 identity 都被封装了起来, 你几乎看不到任何一行代码, 需要向下面这样打开它, 才能做修改. 说一下比较常用的配置 ...
- 两排序数组的中位数 Median of Two Sorted Arrays
2018-11-18 23:33:28 问题描述: 问题求解: 这个问题是一个比较有难度的可以使用二分搜索法求解的问题,如果采用朴素的解法进行merge再找中位数的话,其时间复杂度为O(n1 + n2 ...
- ico 图标 生成 工具 网站
http://www.faviconico.org/favicon favicon.ico在线制作,在线Favicon.ico制作转换工具