HttpRequest公共类:

  1. public static class HttpRequestAction
  2. {
  3. /// <summary>
  4. /// 发送http请求并返回响应
  5. /// </summary>
  6. /// <param name="url">请求目标</param>
  7. /// <param name="parameters">参数</param>
  8. /// <param name="timeout">过期时间</param>
  9. /// <param name="userAgent">用户地址IP</param>
  10. /// <param name="requestEncoding">请求编码</param>
  11. /// <param name="cookies"是否带有cookie></param>
  12. /// <returns>返回响应对象</returns>
  13. public static HttpWebResponse CreatePostHttpResponse(string url, string parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies)
  14. {
  15. if (string.IsNullOrEmpty(url))
  16. {
  17. throw new ArgumentNullException("url");
  18. }
  19. if (requestEncoding == null)
  20. {
  21. throw new ArgumentNullException("requestEncoding");
  22. }
  23. HttpWebRequest request = null;
  24. //如果是发送HTTPS请求
  25. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  26. {
  27. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  28. request = WebRequest.Create(url) as HttpWebRequest;
  29. request.ProtocolVersion = HttpVersion.Version10;
  30. }
  31. else
  32. {
  33. request = WebRequest.Create(url) as HttpWebRequest;
  34. }
  35. request.Method = "POST";
  36. request.ContentType = "application/json;charset=utf-8";
  37. if (timeout.HasValue)
  38. {
  39. request.Timeout = timeout.Value;
  40. }
  41. if (cookies != null)
  42. {
  43. request.CookieContainer = new CookieContainer();
  44. request.CookieContainer.Add(cookies);
  45. }
  46. //如果需要POST数据
  47. if (parameters != null)
  48. {
  49. StringBuilder buffer = new StringBuilder();
  50. buffer.Append(parameters);
  51. byte[] data = requestEncoding.GetBytes(buffer.ToString());
  52. using (Stream stream = request.GetRequestStream())
  53. {
  54. stream.Write(data, , data.Length);
  55. }
  56. }
  57. return request.GetResponse() as HttpWebResponse;
  58.  
  59. }
  60. }

客户端调用代码:

  1. [TestClass]
  2. public class CouponAPIUT
  3. {
  4.  
  5. int _entId = ;
  6. string _loginAccount = "test";
  7. string _orderNo = "testorderno";
  8. SysEnums.BizProduct biz = SysEnums.BizProduct.DAT;
  9.  
  10. [TestMethod]
  11. public void PreReceive()
  12. {
  13. var list = CouponAPIServiceUT.GetReceivableCouponsForTest();
  14. if (list == null || !list.Any())
  15. {
  16. Assert.IsFalse( == );
  17. }
  18. var dto = new APICommon.PreReceiveDTO
  19. {
  20. EntId = _entId,
  21. CouponCodes = list.First().CouponCode,
  22. LoginAccount = _loginAccount,
  23. BizProduct = biz.ToString(),
  24. OrderNo = _orderNo,
  25. OrderStatus = "YDZ",
  26. OrderAmount =
  27. };
  28. string targetUrl = "http://localhost:5550/CouponAPI/PreReceive"; //
  29. string param = JsonConvert.SerializeObject(dto);
  30. var response = HttpRequestAction.CreatePostHttpResponse(targetUrl, param, , null, Encoding.UTF8, null);
  31. var responseStream = response.GetResponseStream();
  32. StreamReader readerStream = new StreamReader(response.GetResponseStream());
  33. string result = readerStream.ReadToEnd();
  34. readerStream.Close();
  35. }
  36. }

以mvc web应用程序为例,服务端的接口Action用[HttpPost]标记(直接在ie里访问http://localhost:5550/CouponAPI/PreReceive是会报404的)。其声明及获取数据的方式有两种:

方式一,不声明参数,通过Request.InputStream得到请求的参数:

  1. [HttpPost]
  2. public ActionResult PreReceive()
  3. {
  4. LogHelper.Write("接口被访问:" + Request.Url);
  5. try
  6. {
  7. APICommon.PreReceiveDTO dto = GetDtoFromRequestStream<APICommon.PreReceiveDTO>(Request.InputStream);
  8. var response = recAPI.PreReceive(dto); // 调用BLL层逻辑
  9. return Content(response.ToString());
  10. }
  11. catch (ResponseErrorException ex)
  12. {
  13. var m = new ResponseModel(false, ex.Message);
  14. return Content(m.ToString());
  15. }
  16. }
  17.  
  18. public static T GetDtoFromRequestStream<T>(Stream stream) where T : class
  19. {
  20. using (StreamReader readerStream = new StreamReader(stream))
  21. {
  22. string result = readerStream.ReadToEnd();
  23. LogHelper.Write("从流中得到的消息为:" + result);
  24. return JsonConvert.DeserializeObject<T>(result);
  25.  
  26. }
  27. }

方式二,显式声明参数,程序里即可直接取参数的值:

  1. [HttpPost]
  2. public ActionResult PreReceive(int entId, string CouponCodes, string LoginAccount, string bizProduct, string orderNo, string orderStatus, string orderAmount)
  3. {
  4. LogHelper.Write("接口被访问:" + Request.Url);
  5. var response = new ResponseModel(false);
  6. try
  7. {
  8. decimal amt = ;
  9. if (!string.IsNullOrEmpty(orderAmount))
  10. {
  11. decimal.TryParse(orderAmount, out amt);
  12. }
  13. var dto = new APICommon.PreReceiveDTO
  14. {
  15. EntId = entId,
  16. CouponCodes = CouponCodes,
  17. LoginAccount = LoginAccount,
  18. BizProduct = bizProduct,
  19. OrderNo = orderNo,
  20. OrderStatus = orderStatus,
  21. OrderAmount = amt
  22. };
  23. response = recAPI.PreReceive(dto); // 调用BLL层逻辑
  24. }
  25. catch (ResponseErrorException ex)
  26. {
  27. LogHelper.Write("执行逻辑返回:{0}", ex.Message);
  28. response = new ResponseModel(false, ex.Message);
  29. }
  30. catch (Exception ex)
  31. {
  32. LogHelper.Write("捕获到异常:{0}", ex.Message);
  33. response = new ResponseModel(false, ex.Message);
  34.  
  35. }
  36. return Content(response.ToString());
  37. }

▄︻┻┳═一tomcat与jetty接收请求参数的区别

▄︻┻┳═一比较两种方式的form请求提交

▄︻┻┳═一Post方式的Http流请求调用

Post方式的Http流请求调用的更多相关文章

  1. http流请求时,被请求站点HttpContext.Current为null?

    我负责运维一个短信接口站点sms.调用上游短信供应商下发短信后,他们会给我们推送发送报告.报告是类似DELIVRD.DI:9432这样的码.为了方便识别,系统里有一个报告码与其描述的关系,一开始是写死 ...

  2. C# 使用 HttpPost 请求调用 WebService

    之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最近发现还可以使用 Http 请求调用 WebService.这里还想说一句,还是 web api 的调用 ...

  3. C# 使用 HttpPost 请求调用 WebService (转)

    转自 https://www.cnblogs.com/Brambling/p/7266482.html 之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最 ...

  4. 小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务

    笔记 5.微服务调用方式之feign 实战 订单调用商品服务     简介:改造电商项目 订单服务 调用商品服务获取商品信息         Feign: 伪RPC客户端(本质还是用http)    ...

  5. 小D课堂 - 新版本微服务springcloud+Docker教程_4-02 微服务调用方式之ribbon实战 订单调用商品服务

    笔记 2.微服务调用方式之ribbon实战 订单调用商品服务     简介:实战电商项目 订单服务 调用商品服务获取商品信息         1.创建order_service项目         2 ...

  6. android中用get和post方式向服务器提交请求

    通过get和post方式向服务器发送请求首先说一下get和post的区别get请求方式是将提交的参数拼接在url地址后面,例如http://www.baidu.com/index.jsp?num=23 ...

  7. EzHttp 流传输调用代码示例

    EzHttp框架提供的内置接口,用于文件流等传输 流传输调用代码示例 内置接口: public interface IEzStreamHandler { Task<byte[]> GetD ...

  8. ffmpeg强制使用TCP方式读取rtsp流

    ffmpeg强制使用TCP方式处理rtsp流,参考网上资料,得知可以使用如下命令: “ffmpeg -rtsp_transport tcp -i rtsp://admin.......” 可以是使用抓 ...

  9. ajax 请求调用问题

    http://localhost/dev/list 和  http://127.0.0.1/dev/list 最近在架构整体常规通用系统的解决方案,遭遇AJAX请求不执行的问题,刚开始以为Spring ...

随机推荐

  1. R in a nutshell(连载)

    data(cars)dim(cars)names(cars)summary(cars)plot(cars, xlab = "Speed (mph)", ylab = "S ...

  2. 如何更改OS系统下截图生成图片格式 jpg pdf

    Mac系统下快速截屏的快捷键: 1.截全屏: shift + command + 3 2.选取截屏 shift + command + 4 生成的图片,系统默认格式忘了,反正不好用,用下面命令更改生成 ...

  3. second class

    nothing no very good. 1.look at shuruo.html,after display:inline-block; li's width as the content; S ...

  4. OD使用教程4

    去除nag窗口: 方法一将je改成jmp跳过messageboxA 方法二全部填充成Nop,选中右键二进制Nop填充 第三种方法push的值改成1使句柄不存在 获得模块句柄: 第四种修改入口地址 点击 ...

  5. Codeigniter 在Active Record中限制批量更新数目

    今天手头电商项目有个需求是:将订单中的优惠券自动发放给买家,所以要只更新优惠券表中的某几行数据,查了手册和网络都没有解决办法. 一开始用循环和遍历来做都是错的,因为update语句一下就更新掉所有符合 ...

  6. 解析 Json 相关

    statusJson sj = new statusJson() { ShipmentNum = "555555", Status1 = "05", Wareh ...

  7. nginx负载均衡最新

    配置conf文件 #user  nobody;worker_processes  1;#error_log  logs/error.log;#error_log  logs/error.log  no ...

  8. Java 第17章 继承

    继承的概念 继承机制是面向对象程序设计不可缺少的关键概念,是实现软件可重用的根基, 是提高软件系统的可扩展性与可维护性的主要途径. 所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类 ...

  9. Swift基础语法(二)

    操作符 swift中运算符基本基础于c,下面我就给大家白话白话那些被优化过的运算符们 //加号减号的妙用 var a= var b= -a//此时b=-1 var c = +b//此时 c=-1 va ...

  10. 【13-Annotation】

    Annotation 5个基本的Annotation •@Override •@Deprecated •@SuppressWarnings •@SafeVarargs •@FunctionalInte ...