Post方式的Http流请求调用
HttpRequest公共类:
- public static class HttpRequestAction
- {
- /// <summary>
- /// 发送http请求并返回响应
- /// </summary>
- /// <param name="url">请求目标</param>
- /// <param name="parameters">参数</param>
- /// <param name="timeout">过期时间</param>
- /// <param name="userAgent">用户地址IP</param>
- /// <param name="requestEncoding">请求编码</param>
- /// <param name="cookies"是否带有cookie></param>
- /// <returns>返回响应对象</returns>
- public static HttpWebResponse CreatePostHttpResponse(string url, string parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies)
- {
- if (string.IsNullOrEmpty(url))
- {
- throw new ArgumentNullException("url");
- }
- if (requestEncoding == null)
- {
- throw new ArgumentNullException("requestEncoding");
- }
- HttpWebRequest request = null;
- //如果是发送HTTPS请求
- if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
- {
- ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
- request = WebRequest.Create(url) as HttpWebRequest;
- request.ProtocolVersion = HttpVersion.Version10;
- }
- else
- {
- request = WebRequest.Create(url) as HttpWebRequest;
- }
- request.Method = "POST";
- request.ContentType = "application/json;charset=utf-8";
- if (timeout.HasValue)
- {
- request.Timeout = timeout.Value;
- }
- if (cookies != null)
- {
- request.CookieContainer = new CookieContainer();
- request.CookieContainer.Add(cookies);
- }
- //如果需要POST数据
- if (parameters != null)
- {
- StringBuilder buffer = new StringBuilder();
- buffer.Append(parameters);
- byte[] data = requestEncoding.GetBytes(buffer.ToString());
- using (Stream stream = request.GetRequestStream())
- {
- stream.Write(data, , data.Length);
- }
- }
- return request.GetResponse() as HttpWebResponse;
- }
- }
客户端调用代码:
- [TestClass]
- public class CouponAPIUT
- {
- int _entId = ;
- string _loginAccount = "test";
- string _orderNo = "testorderno";
- SysEnums.BizProduct biz = SysEnums.BizProduct.DAT;
- [TestMethod]
- public void PreReceive()
- {
- var list = CouponAPIServiceUT.GetReceivableCouponsForTest();
- if (list == null || !list.Any())
- {
- Assert.IsFalse( == );
- }
- var dto = new APICommon.PreReceiveDTO
- {
- EntId = _entId,
- CouponCodes = list.First().CouponCode,
- LoginAccount = _loginAccount,
- BizProduct = biz.ToString(),
- OrderNo = _orderNo,
- OrderStatus = "YDZ",
- OrderAmount =
- };
- string targetUrl = "http://localhost:5550/CouponAPI/PreReceive"; //
- string param = JsonConvert.SerializeObject(dto);
- var response = HttpRequestAction.CreatePostHttpResponse(targetUrl, param, , null, Encoding.UTF8, null);
- var responseStream = response.GetResponseStream();
- StreamReader readerStream = new StreamReader(response.GetResponseStream());
- string result = readerStream.ReadToEnd();
- readerStream.Close();
- }
- }
以mvc web应用程序为例,服务端的接口Action用[HttpPost]标记(直接在ie里访问http://localhost:5550/CouponAPI/PreReceive是会报404的)。其声明及获取数据的方式有两种:
方式一,不声明参数,通过Request.InputStream得到请求的参数:
- [HttpPost]
- public ActionResult PreReceive()
- {
- LogHelper.Write("接口被访问:" + Request.Url);
- try
- {
- APICommon.PreReceiveDTO dto = GetDtoFromRequestStream<APICommon.PreReceiveDTO>(Request.InputStream);
- var response = recAPI.PreReceive(dto); // 调用BLL层逻辑
- return Content(response.ToString());
- }
- catch (ResponseErrorException ex)
- {
- var m = new ResponseModel(false, ex.Message);
- return Content(m.ToString());
- }
- }
- public static T GetDtoFromRequestStream<T>(Stream stream) where T : class
- {
- using (StreamReader readerStream = new StreamReader(stream))
- {
- string result = readerStream.ReadToEnd();
- LogHelper.Write("从流中得到的消息为:" + result);
- return JsonConvert.DeserializeObject<T>(result);
- }
- }
方式二,显式声明参数,程序里即可直接取参数的值:
- [HttpPost]
- public ActionResult PreReceive(int entId, string CouponCodes, string LoginAccount, string bizProduct, string orderNo, string orderStatus, string orderAmount)
- {
- LogHelper.Write("接口被访问:" + Request.Url);
- var response = new ResponseModel(false);
- try
- {
- decimal amt = ;
- if (!string.IsNullOrEmpty(orderAmount))
- {
- decimal.TryParse(orderAmount, out amt);
- }
- var dto = new APICommon.PreReceiveDTO
- {
- EntId = entId,
- CouponCodes = CouponCodes,
- LoginAccount = LoginAccount,
- BizProduct = bizProduct,
- OrderNo = orderNo,
- OrderStatus = orderStatus,
- OrderAmount = amt
- };
- response = recAPI.PreReceive(dto); // 调用BLL层逻辑
- }
- catch (ResponseErrorException ex)
- {
- LogHelper.Write("执行逻辑返回:{0}", ex.Message);
- response = new ResponseModel(false, ex.Message);
- }
- catch (Exception ex)
- {
- LogHelper.Write("捕获到异常:{0}", ex.Message);
- response = new ResponseModel(false, ex.Message);
- }
- return Content(response.ToString());
- }
▄︻┻┳═一tomcat与jetty接收请求参数的区别
▄︻┻┳═一比较两种方式的form请求提交
▄︻┻┳═一Post方式的Http流请求调用
Post方式的Http流请求调用的更多相关文章
- http流请求时,被请求站点HttpContext.Current为null?
我负责运维一个短信接口站点sms.调用上游短信供应商下发短信后,他们会给我们推送发送报告.报告是类似DELIVRD.DI:9432这样的码.为了方便识别,系统里有一个报告码与其描述的关系,一开始是写死 ...
- C# 使用 HttpPost 请求调用 WebService
之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最近发现还可以使用 Http 请求调用 WebService.这里还想说一句,还是 web api 的调用 ...
- C# 使用 HttpPost 请求调用 WebService (转)
转自 https://www.cnblogs.com/Brambling/p/7266482.html 之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务
笔记 5.微服务调用方式之feign 实战 订单调用商品服务 简介:改造电商项目 订单服务 调用商品服务获取商品信息 Feign: 伪RPC客户端(本质还是用http) ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-02 微服务调用方式之ribbon实战 订单调用商品服务
笔记 2.微服务调用方式之ribbon实战 订单调用商品服务 简介:实战电商项目 订单服务 调用商品服务获取商品信息 1.创建order_service项目 2 ...
- android中用get和post方式向服务器提交请求
通过get和post方式向服务器发送请求首先说一下get和post的区别get请求方式是将提交的参数拼接在url地址后面,例如http://www.baidu.com/index.jsp?num=23 ...
- EzHttp 流传输调用代码示例
EzHttp框架提供的内置接口,用于文件流等传输 流传输调用代码示例 内置接口: public interface IEzStreamHandler { Task<byte[]> GetD ...
- ffmpeg强制使用TCP方式读取rtsp流
ffmpeg强制使用TCP方式处理rtsp流,参考网上资料,得知可以使用如下命令: “ffmpeg -rtsp_transport tcp -i rtsp://admin.......” 可以是使用抓 ...
- ajax 请求调用问题
http://localhost/dev/list 和 http://127.0.0.1/dev/list 最近在架构整体常规通用系统的解决方案,遭遇AJAX请求不执行的问题,刚开始以为Spring ...
随机推荐
- R in a nutshell(连载)
data(cars)dim(cars)names(cars)summary(cars)plot(cars, xlab = "Speed (mph)", ylab = "S ...
- 如何更改OS系统下截图生成图片格式 jpg pdf
Mac系统下快速截屏的快捷键: 1.截全屏: shift + command + 3 2.选取截屏 shift + command + 4 生成的图片,系统默认格式忘了,反正不好用,用下面命令更改生成 ...
- second class
nothing no very good. 1.look at shuruo.html,after display:inline-block; li's width as the content; S ...
- OD使用教程4
去除nag窗口: 方法一将je改成jmp跳过messageboxA 方法二全部填充成Nop,选中右键二进制Nop填充 第三种方法push的值改成1使句柄不存在 获得模块句柄: 第四种修改入口地址 点击 ...
- Codeigniter 在Active Record中限制批量更新数目
今天手头电商项目有个需求是:将订单中的优惠券自动发放给买家,所以要只更新优惠券表中的某几行数据,查了手册和网络都没有解决办法. 一开始用循环和遍历来做都是错的,因为update语句一下就更新掉所有符合 ...
- 解析 Json 相关
statusJson sj = new statusJson() { ShipmentNum = "555555", Status1 = "05", Wareh ...
- nginx负载均衡最新
配置conf文件 #user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log no ...
- Java 第17章 继承
继承的概念 继承机制是面向对象程序设计不可缺少的关键概念,是实现软件可重用的根基, 是提高软件系统的可扩展性与可维护性的主要途径. 所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类 ...
- Swift基础语法(二)
操作符 swift中运算符基本基础于c,下面我就给大家白话白话那些被优化过的运算符们 //加号减号的妙用 var a= var b= -a//此时b=-1 var c = +b//此时 c=-1 va ...
- 【13-Annotation】
Annotation 5个基本的Annotation •@Override •@Deprecated •@SuppressWarnings •@SafeVarargs •@FunctionalInte ...