C# WebApi Get请求方式传递实体参数
我又搞回笃NET啦!java之路真是命运多舛,好事多磨。不过,也许我已经进入无招胜有招,博取众家之长、融会贯通的地步了。
对于WebApi,今天又有了一些新的了解。
话说,Get请求方式,参数会附在Url后面,称为QueryString,传递给服务器;而POST方式,则将参数放在消息体内。
采用QueryString的话,简单,方便,但只适合参数比较少的情况;但有的时候,需要传递比较多、比较复杂的参数,比如,组合条件查询什么的。酱紫的话,条件会很多,通常会用一个实体类来封装,传递给服务器。用post方式肯定是可以的,驾轻就熟。问题是,RESTful原则,是将一切抽象成资源,对资源的不同请求方式,代表了对资源的不同操作。按道理,post难道不是代表插入吗?为啥查询也要用到post?
GET方式下,是不是也可以将实体参数提交给服务器?但查来查去,ajax好像可以;但服务器端,使用WebClient就没有找到现成的例子,不知道该咋整。只好用最原始的方法,将实体类转化成QueryString,附在地址后面了。有两个问题:
1、实体类如何转换成QueryString这种键值对格式?
2、服务器端如何提取?
一、实体类如何转换成QueryString这种键值对格式?
叫键值对可能不够专业,叫NameValueCollection
?
很遗憾,也没找到啥现成的例子。
最后祭出反射,来拼装QueryString
二、服务器端如何提取QueryString里参数,自动变成一个实体类?
参数前面标注[FromUri]特性
上代码。
实体类:
namespace BaseLT.Core.Contract
{public class Request{public Request();public int Top { set; }public int PageSize { get; set; }public int PageIndex { get; set; }public string OrderBy { get; set; }public int SortState { get; set; }public bool CompareObject<T>(T obj1, T obj2);public void ExtjsInit();}
}
WebApi服务器端:
public class TankController : ApiController
{[HttpGet][Route("api/tank/matters/public/{id=0}")]public IEnumerable<Matter> Get(int id,[FromUri]Request req){return do sth;}
}
客户端:
[TestMethod]
public void TestTankApi()
{string url = "http://localhost/ybjzuser.api/api/tank/matters/public/";url += getQueryString(new Request(){PageIndex = 1,PageSize = 100});string re;using (WebClient webClient = new WebClient()){webClient.Encoding = Encoding.GetEncoding("utf-8");re = webClient.DownloadString(url);}Assert.AreNotEqual(null, re);Console.WriteLine(re);
}
static string getQueryString(Request req)
{StringBuilder query = new StringBuilder("?");PropertyInfo[] propertys = req.GetType().GetProperties();foreach (PropertyInfo pi in propertys){if (pi.CanRead){query.Append($@"{pi.Name}={pi.GetValue(req)}&");}}return query.ToString();
}
相关拙作:
ASP.NET for WebApi
通过接口提交数据,Content-Type应该是application/x-www-form-urlencoded还是application/json?
C# WebApi Get请求方式传递实体参数相关推荐
- HTTP GET请求方式传递数组参数
http GET请求方式如何传递数组参数?一起来看看. 先在本地服务器上来一个controller方法,我们把接收到的参数打印在控制台上,顺便多此一举地返回一下响应结果 用postman请求一下: 再 ...
- 【Tomcat】解决GET方式传递的参数(URL中的参数)乱码问题
在Tomcat中(其它的webserver中也一样),参数可以通过GET和POST方式传递.通过GET和POST方式传递的参数,遇到乱码时的解决办法也不一样. 在Tomcat中遇到GET方式传递的参数 ...
- http url get方式传递数组参数
此文为自己记录,请大家指教 URL 通过Get方式传递数组参数 方法1: ?id=1&id=2&id=3 注意:Get 方式有字数限制 后台获取时,只需要reqeust.getPara ...
- 2021 Axios 各种请求方式传递参数格式整理
目录 axios.request(config) axios.get(url[, config]) axios.delete(url[, config]) axios.post(url[, data[ ...
- vue 请求参数数组_vue中get请求如何传递数组参数
前言: vue中在与后端进行数据交互时,使用axios发送请求,不做配置直接使用get请求传递数组类型参数的时候,后端是无法接收数据的,需要对axios一些简单的配置才能让后端完美的接收数组 1.问题 ...
- GET请求如何传递数组参数
方式一 可以将数组参数传递多次,springmvc会将多个同名参数自动封装成数组或者集合对象,示例如下: # 请求URL http://127.0.0.1:8080/getUsers?name=张三& ...
- java http参数传递_Java在HTTP请求中传递数组参数的方法
有个功能需要我请求别人提供的接口,该接口的参数是一个多维数组,大致类似这样:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...
- javascript 请求action传递中文参数乱码问题
1.js $.ajaxFileUpload ( { url:'<%=basePath%>uploadDatFile/ ...
- 安卓HttpURLConnection 进行http请求(传递数据 获取数据 主线程禁止网络请求)以get方式为例
注意: 1.安卓主线程禁止联网操作,如果在主线程中使用HttpURLConnection需通过new Thread()在新的线程中使用. 2.使用HttpURLConnection时必须设计异常处理. ...
最新文章
- 让浏览器不记住表单元素输入过的内容
- 【温故知新】CSS学习笔记(三大特性)
- ZooKeeper入门(三)zookeeper的Watcher机制
- encountered unknown setting 'componentData' for class 'cus.crm.mycalendar.C
- Java反射机制在UI自动化测试中的一个应用
- mysql批量存图片_教你如何在MySQL数据库中直接储存图片(3)
- jeecg3.5的一个bug
- ES6新特性之 promise
- Microsoft AJAX Library对 String的扩展
- 360搜索引擎能否给苦逼的站长们带来希望?
- 这位辩手,你想试试线上语音 battle 么?
- 频谱分析仪原理结构图
- 如何从任何Mac或Windows PC为iOS打印启用AirPrint
- [总结] 单颗粒分析(SPA, Single particle analysis)
- c++直方图匹配终极版,支持任意通道数(opencv版本)
- Java中的上界与下界(? extends/super T)
- 详解GMT CST UTC DST PDT PST几个时间概念
- Linux-USB学习 -- USB枚举过程
- Unity3D-游戏场景优化之遮挡剔除(Occlusion Culling)的使用
- 电路元器件3——TVS:
热门文章
- 天际友盟_真正增加游戏性的最佳天际模组
- 暗藏的比特币白皮书已删除 苹果其实与Web3“格格不入”?
- 《图解机器学习》(杉山将.著)笔记——第一章 什么是机器学习
- 子网掩码,网络ID,IP之间关系
- 计算机检测报告素材,笔记本检测报告模板.doc
- Java读取图片中的地理坐标(三)
- 【产品】一次完整的产品需求分析及设计流程分享
- 【Leetcode单调队列】- 洛谷P1714切蛋糕
- Android APK打包加固 以及上传审核流程和APP上线10多家开发者平台地址
- 安卓webrtc在ubuntu 2004下编译使用