我又搞回笃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请求方式传递实体参数相关推荐

  1. HTTP GET请求方式传递数组参数

    http GET请求方式如何传递数组参数?一起来看看. 先在本地服务器上来一个controller方法,我们把接收到的参数打印在控制台上,顺便多此一举地返回一下响应结果 用postman请求一下: 再 ...

  2. 【Tomcat】解决GET方式传递的参数(URL中的参数)乱码问题

    在Tomcat中(其它的webserver中也一样),参数可以通过GET和POST方式传递.通过GET和POST方式传递的参数,遇到乱码时的解决办法也不一样. 在Tomcat中遇到GET方式传递的参数 ...

  3. http url get方式传递数组参数

    此文为自己记录,请大家指教 URL 通过Get方式传递数组参数 方法1: ?id=1&id=2&id=3 注意:Get 方式有字数限制 后台获取时,只需要reqeust.getPara ...

  4. 2021 Axios 各种请求方式传递参数格式整理

    目录 axios.request(config) axios.get(url[, config]) axios.delete(url[, config]) axios.post(url[, data[ ...

  5. vue 请求参数数组_vue中get请求如何传递数组参数

    前言: vue中在与后端进行数据交互时,使用axios发送请求,不做配置直接使用get请求传递数组类型参数的时候,后端是无法接收数据的,需要对axios一些简单的配置才能让后端完美的接收数组 1.问题 ...

  6. GET请求如何传递数组参数

    方式一 可以将数组参数传递多次,springmvc会将多个同名参数自动封装成数组或者集合对象,示例如下: # 请求URL http://127.0.0.1:8080/getUsers?name=张三& ...

  7. 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 ...

  8. javascript 请求action传递中文参数乱码问题

    1.js $.ajaxFileUpload         (             {                 url:'<%=basePath%>uploadDatFile/ ...

  9. 安卓HttpURLConnection 进行http请求(传递数据 获取数据 主线程禁止网络请求)以get方式为例

    注意: 1.安卓主线程禁止联网操作,如果在主线程中使用HttpURLConnection需通过new Thread()在新的线程中使用. 2.使用HttpURLConnection时必须设计异常处理. ...

最新文章

  1. 让浏览器不记住表单元素输入过的内容
  2. 【温故知新】CSS学习笔记(三大特性)
  3. ZooKeeper入门(三)zookeeper的Watcher机制
  4. encountered unknown setting 'componentData' for class 'cus.crm.mycalendar.C
  5. Java反射机制在UI自动化测试中的一个应用
  6. mysql批量存图片_教你如何在MySQL数据库中直接储存图片(3)
  7. jeecg3.5的一个bug
  8. ES6新特性之 promise
  9. Microsoft AJAX Library对 String的扩展
  10. 360搜索引擎能否给苦逼的站长们带来希望?
  11. 这位辩手,你想试试线上语音 battle 么?
  12. 频谱分析仪原理结构图
  13. 如何从任何Mac或Windows PC为iOS打印启用AirPrint
  14. [总结] 单颗粒分析(SPA, Single particle analysis)
  15. c++直方图匹配终极版,支持任意通道数(opencv版本)
  16. Java中的上界与下界(? extends/super T)
  17. 详解GMT CST UTC DST PDT PST几个时间概念
  18. Linux-USB学习 -- USB枚举过程
  19. Unity3D-游戏场景优化之遮挡剔除(Occlusion Culling)的使用
  20. 电路元器件3——TVS:

热门文章

  1. 天际友盟_真正增加游戏性的最佳天际模组
  2. 暗藏的比特币白皮书已删除 苹果其实与Web3“格格不入”?
  3. 《图解机器学习》(杉山将.著)笔记——第一章 什么是机器学习
  4. 子网掩码,网络ID,IP之间关系
  5. 计算机检测报告素材,笔记本检测报告模板.doc
  6. Java读取图片中的地理坐标(三)
  7. 【产品】一次完整的产品需求分析及设计流程分享
  8. 【Leetcode单调队列】- 洛谷P1714切蛋糕
  9. Android APK打包加固 以及上传审核流程和APP上线10多家开发者平台地址
  10. 安卓webrtc在ubuntu 2004下编译使用