ASP.NET Core API 接收参数去掉烦人的 [FromBody]

在测试ASP.NET Core API 项目的时候,发现后台接口参数为类型对象,对于PostMan和Ajax的Post方法传Json数据都获取不到相应的值,后来在类型参数前面加了一个[FromBody]属性才获取到。但是我看微软官方文档演示代码中并没有添加[FromBody],难道是微软官方文档写错了,按道理应该不会。Google里看到一片篇文章里的一个细节,又追回微软官方文档发现可行,于是记下去掉这个烦人的[FromBody]过程

修改之前测试

后台通过Visual Studio生成ASP.NET Core API项目之后,在Controller里添加如下代码

        // POST: api/Todo
        [HttpPost]
        public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
        {
            _context.TodoItems.Add(todoItem);
            await _context.SaveChangesAsync();

            return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
        }

postMan调用

如图所示,name的值为walk dog,后台api获取结果如第三张图所示:

Jquery调用

如图所示,前端会将页面填写的值进行序列化,但是后端依然获取不到值:

返回结果

不论是postMan调用还是ajax调用,后台都获取不到name值和isComplete的值

增加[FromBody]

测试如下:发现可以获取到相应的值,但是如果每个Post方法并含有类型参数的请求前面都添加这么一个属性,相比以前的Asp.Net Api 操作有点不习惯,甚至多余

进行修改

增加一个Contrller,命名为BaseController, 并继承Controller ,代码如下所示:

   public class BaseController: Controller
    {
    }

然后在BaseController类上增加属性[ApiController],最终如下图所示:

最后修改所有API控制器的父类,改为继承BaseController

修改之后测试

如图所示,此时可以看到已经没有[FromBody]了,需要注意一点是请求的ContentType必须为:application/json

总结

如果没有该[ApiController]属性,则需要显式定义绑定源属性。如果没有[ApiController]或其他绑定源属性[FromQuery],ASP.NET Core运行时会尝试使用复杂的对象模型绑定器。复杂对象模型绑定器从值提供程序(具有已定义的顺序)中提取数据。例如,‘body model binder‘总是选择加入。

原文地址:https://www.cnblogs.com/zhan520g/p/10292903.html

时间: 2024-08-29 03:28:58

ASP.NET Core API 接收参数去掉烦人的 [FromBody]的相关文章

详解ASP.NET Core API 的Get和Post请求使用方式

原文:详解ASP.NET Core API 的Get和Post请求使用方式 上一篇文章帮助大家解决问题不彻底导致博友使用的时候还是遇到一些问题,欢迎一起讨论.所以下面重点详细讲解我们常用的Get和Post请求( 以.net core2.2的Http[Verb]为方向 ,推荐该属性路由),如果想验证,直接利用VS2017创建ASP.NET Core API (.net core 2.2),在DefaultController里面操作.文中有些关键字,我是加了粗的,请注意一下. 帮助回忆,Get和P

asp.net core api网关 实时性能监控

asp.net core api网关 实时性能监控 使用InfluxDB.Grafana Dockerfile 运行 InfluxDB.Grafana influxdb: image: influxdb ports: - "8086:8086" - "8083:8083" environment: - INFLUXDB_DB=TogetherAppMetricsDB - INFLUXDB_ADMIN_ENABLED=true - INFLUXDB_ADMIN_USE

ASP.NET CORE API Swagger+IdentityServer4授权验证

简介 本来不想写这篇博文,但在网上找到的文章博客都没有完整配置信息,所以这里记录下. 不了解IdentityServer4的可以看看我之前写的入门博文 Swagger 官方演示地址 源码地址 配置IdentityServer4服务端 首先创建一个新的ASP.NET Core项目. 这里选择空白项,新建空白项目 等待创建完成后,右键单击项目中的依赖项选择管理NuGet程序包,搜索IdentityServer4并安装: 等待安装完成后,下载官方提供的UI文件,并拖放到项目中.下载地址:https:/

ASP.NET Core API总结(一)

ASP.NET Core API 问题:当应用收到一个http请求之后,API应用程序是怎么一步步执行的. 注册服务——构造容器——使用服务——创建对象 1.         创建一个新的API之后,properties下面会自动生成这个json文件. 2.         第一步:应用启动的时候,在program.cs文件中执行main函数,进行创建主机.(加载配置文件)——指定Startup类(1.配置应用服务.2.创建请求处理管道) 3.         第二步:执行到Startup类的时

ASP.NET Core API ——Dapper的使用

ASP.NET Core API ——Dapper的使用 简介:Dapper是一个ORM框架,负责数据库和程序语言之间的映射. 使用步骤: l  创建一个IDBConnection的接口对象 l  编写Sql语句的增删改查 l  执行Execute方法 1.       提供一个IDBConnection接口对象 2.       在DB仓库中继承抽象类从而获取IDBConnection对象.继承了抽象类,所以抽象类中的属性可以在子类中使用. 3.       编写Sql语句,使用dapper的

【转】【Stackoverflow好问题】去掉烦人的“!=null&quot;(判空语句)

[Stackoverflow好问题]去掉烦人的“!=null"(判空语句) 问题 为了避免空指针调用,我们经常会看到这样的语句 ...if (someobject != null) {   someobject.doCalc();}... 最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢? 精华回答: 这是初.中级程序猿经常会遇到的问题.他们总喜欢在方法中返回null,因此,在调用这些方法时,也不得不去判空.另外,也许受此习惯影响,他们总潜意识地认为,所有的返

ASP.Net Web API 的参数绑定[翻译]

原文地址:Parameter Binding in ASP.NET Web API 译文如下: 当Web API相应Controller的一个方法时,它必定存在一个设置参数的过程,叫作数据绑定.这篇文章描述了Web API如何绑定参数以及如何自定义绑定过程. 一般情况下,Web API绑定参数符合如下规则: 如果参数为简单类型,Web API 尝试从URI中获取.简单参数类型包含.Net源生类型(int,bool,double...),加上TimeSpan,DateTime,Guid,decim

【转】ASP.NET Core API 版本控制

几天前,我和我的朋友们使用 ASP.NET Core 开发了一个API ,使用的是GET方式,将一些数据返回到客户端 APP.我们在前端进行了分页,意味着我们将所有数据发送给客户端,然后进行一些data.length操作,以获得items count用于分页逻辑.为了减少HTTP请求的负荷,我们决定在后端(服务器端分页)实现逻辑.在我们这样的情况下,这是没有任何问题的,因为我们在客户端能快速实现.我们在客户端和服务端修改了所有逻辑,并且快速完成所有功能. 但是,您可能会有其他客户端在使用,因为只

Asp.Net Core Api 使用Swagger管理文档教程的安装与使用

这周因为公司的需求需要我做一个Api的程序,这周的三天时间我一直在Core Api和 framework Api之间做纠结.不知道要使用哪一个去做项目,想着想着就决定了.既然两个我都没用过那个何不来使用Core Api来做呢.也是对自己的一种锻炼! OK,接下来回归正题! Core下的Swagger和传统framework  Mvc下的Swagger是不一样的!  两者的差距:       其一:引用的程序集不一样.          其二:安装完程序集后需要配置的地方不一样,