转载于:https://juejin.im/post/5cdab497e51d453adf1fa729
转载于:https://blog.csdn.net/weixin_34129145/article/details/91441753

Net Core中Get请求接口的参数一般可以在url中获取,但是Post请求接口一般建议使用[FromBody]特性来绑定参数,而前端发请求时也得需要注意,前端代码如下(vue):

const postData = {
id: 12
}; // post请求的数据,可自行定义
this.$axios({
url: api.postUrl,
method: 'post',
params: postData
}).then((result) => {
this.$message({
message: '请求成功',
type: 'success',
showClose: true
});
}).catch((err) => {
this.$message({
message: '请求失败',
type: 'error',
showClose: true
});
})

后端代码如下(.Net Core)

[HttpPost]
public ActionResult HandlePost(int id) {
return Content(id);
}

FromBody特性的使用

如果使用上述方法请求,会发现id可以正常获取,因为axios以params方式提交post参数时,默认将参数放在url后面,而后端接口的参数中如果不加其他参数验证的注解,则会默认从url中寻找参数。而如果在接口的参数验证中加[FromBody]注解时,由于[FromBody]注解无法绑定简单类型的参数,因此将参数的类型改成dynamic,其中dynamic类型为动态类型,和Object类型类似,所以需要使用obj. id的方式来获取参数,即代码如下:

[HttpPost]
public ActionResult HandlePost([FromBody] dynamic obj) {
return Content(obj.id);
}

再次请求会发现后端报错415 UnSupported Media Type,因为当以params方式提交post参数时,请求头中无Content-Type字段,Axios源码中对请求做了处理,如下图:

由此可知当使用params方式提交post参数时,即data参数为空时,即使手动设置请求头的Content-Type也会被清除,所以后端代码由于无法识别Content-Type字段,导致报错415 UnSupported Media Type。 为了解决这个问题,则可以将post提交参数的方式改成data方式提交,代码如下:

const postData = {
id: 12
}; // post请求的数据,可自行定义
this.$axios({
url: api.postUrl,
method: 'post',
data: postData
}).then((result) => {
this.$message({
message: '请求成功',
type: 'success',
showClose: true
});
}).catch((err) => {
this.$message({
message: '请求失败',
type: 'error',
showClose: true
});
})

然后再次请求会发现成功返回传的id参数值。

这里需要注意的是FromBody特性只接受Content-Type为application/json的请求,只有这样参数才能正确绑定,而axios的post请求中Content-Type默认为application/json, 如果在上述前端代码中手动修改请求头为application/x-www-formencoded或者multipart/form-data,则后台接口又会报错415 UnSupported Media Type.

FromForm特性的使用

FromForm特性和FromBody特性的区别是:FromForm特性是用来绑定form-data格式中的表单数据,即Content-Type为multipart/form-data,所以前端代码应修改为如下:

let formData = new FormData();
formData.append('id', 1212);
this.$axios({
url: api.postUrl,
method: 'post',
// 手动设置Content-Type为form-data格式
headers: {
'Content-Type': 'multipart/form-data'
},
data: formData
}).then((result) => {
this.$message({
message: '请求成功',
type: 'success',
showClose: true
});
}).catch((err) => {
this.$message({
message: '请求失败',
type: 'error',
showClose: true
});
})

后端代码修改为如下

[HttpPost]
public ActionResult HandlePost([FromForm] int id) {
return Content(id);
}

FromForm特性没有对简单类型的参数进行限制,所以可以直接获取参数,当formData中有多个参数需要绑定时,可以写成如下格式:

[HttpPost]
public ActionResult HandlePost([FromForm] int id, [FromForm] string name, ....) { // 只需要增加参数的个数就可以
return Content(id);
}

axios Post请求 .Net Core中的接口以及FromBody特性和FromForm特性的使用的更多相关文章

  1. vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)

    vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete) 手把手式笔记 Axios配置 安装 axios ...

  2. day 87 Vue学习六之axios、vuex、脚手架中组件传值

      本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的使用 Axios 是一个基于 promise 的 HT ...

  3. day 84 Vue学习六之axios、vuex、脚手架中组件传值

    Vue学习六之axios.vuex.脚手架中组件传值   本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的 ...

  4. ASP.NET Core 中文文档 第三章 原理(16).NET开放Web接口(OWIN)

    原文:Open Web Interface for .NET (OWIN) 作者:Steve Smith. Rick Anderson 翻译:谢炀(kiler398) 校对:孟帅洋(书缘) ASP.N ...

  5. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  6. ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    ExpandoObject与DynamicObject的使用   using ImpromptuInterface; using System; using System.Dynamic; names ...

  7. Vue项目中使用Vuex + axios发送请求

    本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...

  8. 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码

    详解C#泛型(二)   一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...

  9. 在.NET Core中使用DispatchProxy“实现”非公开的接口

    原文地址:"Implementing" a non-public interface in .NET Core with DispatchProxy 原文作者:Filip W. 译 ...

  10. ASP.NET Core中如何调整HTTP请求大小的几种方式

    一.前言 一般的情况下,我们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值. 在ASP.NET Co ...

随机推荐

  1. Envoy 学习笔记(一)

    该系列学习笔记是作者为记录云原生基础架构学习过程而写.若想要详细学习 envoy,大家可以去 tetrate 官网和官方文档中学习. 如果没有任何接触云原生的经验,可以在学习相关概念前,去了解以下概念 ...

  2. 中文Markmap v2.0 现已上线,新增高效功能,老板再也留不住你下班的脚步!

    介绍 Markmap.js 是一款开源项目,在 GitHub 上获得了超过 1.7 万个星的关注,它的主要功能是将 Markdown 文档可视化为思维导图. 在日常使用中,用户经常需要面对老板的&qu ...

  3. Sa-Token v1.42.0 发布 🚀,新增 API Key、TOTP 验证码、RefreshToken 反查等能力

    Sa-Token 是一款 免费.开源 的轻量级 Java 权限认证框架,主要解决:登录认证.权限认证.单点登录.OAuth2.0.微服务网关鉴权 等一系列权限相关问题. 目前最新版本 v1.42.0 ...

  4. Redis底层数据结构-quicklist、listpack

    quicklist 在 Redis 3.0 之前,List 对象的底层数据结构是双向链表或者压缩列表.然后在 Redis 3.2 的时候,List 对象的底层改由 quicklist 数据结构实现. ...

  5. AoP的相关术语

    一.Joinpoint(连接点): 所谓连接点是指那些被拦截到的点.在 spring 中,这些所谓的点指就是方法,因为 spring 只支持方法类型的连接点. 二.Pointcut(切入点): 所谓切 ...

  6. 基于Vosk与Transformers的会议摘要生成系统实战教程

    一.项目背景与价值 在现代办公场景中,会议记录与摘要生成是提升工作效率的重要环节.传统人工记录方式存在效率低.易遗漏等问题,而基于AI的解决方案可以实时转录会议内容并生成结构化摘要.本教程将指导开发者 ...

  7. docker-compose 启动容器

    docker-compose 是什么 docker-compose 是一个用来把 docker 自动化的东西.有了 docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自 ...

  8. ODOO14修改源生的图标

    第一步:在公司模型界面:拥有权限组:groups="base.group_no_one"  的人可以更改图标 第二步:odoo14\addons\web\static\src\js ...

  9. Java Set的五种遍历方式

      摘要:介绍Java遍历Set的五种方式,并分析哪中方式效率高,建议使用增强for循环变量.   Set 和 List 遍历方式基本一致,本文介绍Set的遍历方式,并比较那种方法执行效率最高. 1. ...

  10. 深入理解Nginx-模块开发与架构解析(第2版)第二章

    Nginx的配置 运行中Nginx进程间的关系 # 为什么产品环境下安装master-worker方式配置同时启动多个进程? - master进程不会对用户提供服务,只用于管理真正提供服务的worke ...