首页 > 其他分享 >.Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute

.Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute

时间:2022-10-07 03:24:14浏览次数:78  
标签:WebApi set string FromRoute FromForm 参数 FromQuery public 请求

  在日常后端Api开发中,我们跟前端的沟通中,通常需要协商好入参的数据类型,和参数是通过什么方式存在于请求中的,是表单(form)、请求体(body)、地址栏参数(query)、还是说通过请求头(header)。

  当协商好后,我们的接口又需要怎么去接收这些数据呢?很多小伙伴可能上手就是直接写一个实体,作为 api 函数的入参,然后就愉快的编写代码了;前端调用时却报 400 错误,可以说是一脸懵;当然,很多情况下这样写是不会报错的,因为我们需要的数据,往往只会存在于一个地方,就是请求体(body),而我们的 .Net Core 又足够的强大,导致本不严谨的操作却不会发生 bug。

  而当出现这样的一个需求的时候,小伙伴们思考一下应该怎么做:一个 Post 请求,参数分别放在了 地址栏(url?key=#$!fsefes&token......)、和请求体中( {“name”:"小明",""sex:"男"} );像这个需求我们的后端接口应该怎么写呢?下面我们尝试一下不严谨的做法。

  首先我们定义一个实体 Info

public class Info
{
    public string? Name { get; set; }

    public string? Sex { get; set; }
}

  而又因为 Url 中的参数数量比较多,常规的一个做法,也是定义一个实体类去接收

public class Parameters
{
    public string? Key { get; set; }

    public string? Token { get; set; }

    public string? Time { get; set; }
}

  然后编写 Post 接口函数,非常简单

[HttpPost]
public int Post(Parameters parameters, Info info)
{
    return 200;
}

  我们直接 F5 把项目跑起来,你会发现,程序报错了,因为程序分不清谁跟谁了

 

   而错误提示非常的清楚,你要使用 FromQuery 特性,现在我们给参数加上这个特性

[HttpPost]
public int Post([FromQuery]Parameters parameters, Info info)
{
    return 200;
}

  再次启动后,代码不报错了,我们看一下 swagger

  由于我们给 parameters 参数加上了 FromQuery 的特性,所以程序就不懵了

 

  下面给大家说下 FromBody FromForm FromQuery FromHeader FromRoute 的区别

  FromBody:当请求的 content-type 为 application/json 时,可以不加上这个特性,因为当入参类型为实体类时,系统默认从请求体(body)中获取数据,在这里建议大家加上;

  FromForm:当请求属于表单提交,也就是 content-type 为 application/x-www-form-urlencoded,则必须给参数加上 FromForm 特性,否者会报 400 错误;

  FromQuery:获取地址烂参数,当接口参数是一个实体类时,建议必须加上该特性;

  FromHeader:获取请求头参数;

  FromRoute:获取路由参数,这个可能有些小伙伴会很疑惑,我贴出个代码大家就懂了:

[HttpPost("{id}")]
public int Post([FromRoute]string id, [FromQuery]Parameters parameters, Info info)
{
    return 200;
}

   好了,本文到此结束,感谢大佬们的观看,谢谢!

原文链接:https://www.cnblogs.com/ysmc/p/16758995.html

标签:WebApi,set,string,FromRoute,FromForm,参数,FromQuery,public,请求
From: https://www.cnblogs.com/ysmc/p/16758995.html

相关文章

  • 前端面试总结12-WebApi-存储
    简述cooki,localstorage,sessionstorage的区别(1:cookie数据存放在浏览器上,session存放在服务器上(2:cookie安全性低(3:session占用服务器性能(4:单个cookie最大存储数据不超过4k......
  • 前端面试总结11-WebApi-Ajax
    1.同源策略:ajax请求时,浏览器要求当前网页和serve必须同源(安全),即协议,域名,端口三者必须一致2.可无视同源策略的情况(1:<img/>可用于统计打点,可使用第三方统计服务(2:<link/><......
  • webapi 问题收集
    webapi问题收集1请确保在所有其他初始化代码后面的应用程序启动代码中调用HttpConfiguration.EnsureInitialized()当启动webapi项目调用其中一个url时报该错误,解决方法如......
  • 用swagger-ui来生成webapi接口文档并可以在线测试
    用swagger-ui来生成webapi接口文档并可以在线测试Swagger-UI简单而一目了然。它能够纯碎的基于html+javascript实现,只要稍微整合一下便能成为方便的API在线测试工具。项目的......
  • netcore webapi网关项目swagger页面动态显隐
    在实际开发过程中,我们会遇到这么一个问题:通常我们前后端分离开发,后端为前端提供一个swagger页面,做两者的对接联调,但是上线后,我们网关swagger是暴露在公网上的,即使我们已经......
  • 前端面试总结10-WebApi-事件
    1.事件绑定通用函数(包括事件代理)functionbindEvent(elem,type,selector,fn){if(fn==null){fn=selector;selector=null;}elem.addEventListener(type,event=>{con......
  • 前端面试总结08-WebApi-Bom
    知识点:(1:navigator:识别浏览器类型  (2:sreen  (3:location:拆解url各个部分  (4:history ......
  • 前端面试总结08-WebApi-Dom
    1.Dom的本质:树结构(Dom树)   2.Dom常见获取结点操作(1:document.getElementById('');(2:document.getElementsByTagName('');//集合(3:document.getElementsByClassName......
  • NetCoreWebApi3.0-------MiniProfiler使用教程
    参考博客:ASP.NETCoreWebAPI中的分析工具MiniProfiler-LamondLu-博客园(cnblogs.com) 注意事项:1.不要盲目copy别人的代码varhtml=MiniProfiler.Current.Re......
  • winform程序如何调用webapi接口?附源码
    我们开发winform程序时,通常使用传统的三层结构,包括:数据层、业务层、页面层。Form页面调用时,直接new个Service类,实现业务需求。但这种模式有个弊端,就是业务逻辑全部放到了客......