//方法1. Post 异步请求,普通的异步请求,传输普通的字符串等,对于有html代码的字段值的传输支持不好,如果需要传输html,二进制等数据的传输,请使用下面第二个方法,即使用UploadDataAsync

using (var client = new WebClient())
{
var paramJson = ObjectToJson(emailModel);
client.Headers[HttpRequestHeader.ContentType] = "application/json";
cli.UploadStringAsync(new Uri(url), paramJson);
}

//方法2. Post 异步请求,emailModel实体可包含byte[]的字段值

下面传入的json就包含byte[]的字段序列化成json的,但注意一点,如果用Newtonsoft序列化byte[]的字段,序列化后的json是经过BaseString64编码后面的类似于AUUUAABWWWBBCCCC(瞎写的,示例而已)这样的字段串,

这样序列后的json传入这个方法后byte[]字段的值会丢失,我们需要的其实是把比如byte[] files=[22,45,67,67,89,54,21]这个字段的值,序列化后得到[22,45,67,67,89,54,21]这个字符串,

而不想得到经过BaseString64编码后面的类似于AUUUAABWWWBBCCCC的字符串,这时可以使用.net原装的JavascriptSerialize.Serialize(model)来达到这种效果,这点需要特别注意下,, 暂时没有找到Newtonsoft序列化byte[]为byte[]字符串的解决办法。

using (var client = new WebClient())
{
var paramJson = ObjectToJson(emailModel);
client.Headers[HttpRequestHeader.ContentType] = "application/json";
var bytes = Encoding.UTF8.GetBytes(paramJson);
client.UploadDataAsync(new Uri(url), "POST", bytes);
}

public static string ObjectToJson(object obj)
{
JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
return jsonSerialize.Serialize(obj);
}

方法3. 使用RestSharp第三方库dll发起Http请求,emailModel实体可包含byte[]的字段值,Rest会自动处理传输数据,进行序列化

var model = new { Name = "NotifyAdminPlaceOrder", Subject = "<%CompanyName%> Cash Exercise行权管理", Body = emailModel.Parameters["@Content"] };
string url2 = "https://localhost:44300/system/GenerateMailTemplate";
var request = new RestRequest();
request.RequestFormat = DataFormat.Json;
request.AddBody(model);
var restClient = new RestClient(url2);
restClient.PostAsync(request, null);

方法4. 比较老的发起Web请求的方法,虽然代码陈旧但宝刀未老,是功能比较全面的选项之一。

下面传入的json就包含byte[]的字段序列化成json的,但注意一点,如果用Newtonsoft序列化byte[]的字段,序列化后的json是经过BaseString64编码后面的类似于AUUUAABWWWBBCCCC(瞎写的,示例而已)这样的字段串,

这样序列后的json传入这个方法后byte[]字段的值会丢失,我们需要的其实是把比如byte[] files=[22,45,67,67,89,54,21]这个字段的值,序列化后得到[22,45,67,67,89,54,21]这个字符串,

而不想得到经过BaseString64编码后面的类似于AUUUAABWWWBBCCCC的字符串,这时可以使用.net原装的JavascriptSerialize.Serialize(model)来达到这种效果,这点需要特别注意下, 暂时没有找到Newtonsoft序列化byte[]为byte[]字符串的解决办法。

/// <summary>
/// 创建JSON请求
/// </summary>
/// <param name="url">请求的URL</param>
/// <param name="json">请求中包含的JSON字符串参数</param>
/// <param name="userAgent">请求的客户端浏览器信息,可以为空,或使用TC.Core.Web.BrowserUserAgent类获取</param>
/// <param name="requestEncoding">请求编码</param>
/// <returns></returns>
public static HttpWebResponse CreateJSONReponse(string url, string json, string userAgent = "", Encoding requestEncoding = null)
{
if (requestEncoding == null)
requestEncoding = Encoding.UTF8;

var data = requestEncoding.GetBytes(json);
var uri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

//此处为C#实现的一些标准http请求头添加方法,用上面的方面也可以实现
request.ContentType = "application/json";
request.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml";
request.ContentLength = data.Length;
request.UserAgent = string.IsNullOrEmpty(userAgent) ? "TC.Framework.MessageHandling" : userAgent;
//此处添加标准http请求方面
request.Method = "POST";

System.IO.Stream sm = request.GetRequestStream();
sm.Write(data, 0, data.Length);
sm.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return response;
}

最新文章

  1. iOS runtime 初步学习
  2. [转载]DW数据仓库建模与ETL的实践技巧
  3. mysql_4(解决中文乱码问题)
  4. J2EE 第二阶段项目(八)
  5. syslog syslog-ng rsyslog flume scribe 各种尝试
  6. 科普:WiFi是谁申请的专利?高通吗?错!
  7. Peterson算法与Dekker算法解析
  8. Js 的常用方法:页面跳转,Session,类继承
  9. Eclipse 打开时“发现了以元素&#39;d:skin&#39;”开头的无效内容。此处不应含有子元素(转)
  10. QF——UI之UIImageView及UIView的形变属性transform
  11. JSP的学习(5)——语法知识三之include指令
  12. esclipse连接mysql数据库
  13. DES加解密
  14. Docker多主机管理(八)--技术流ken
  15. jquery.validate.js使用实例
  16. Classnotfoundexception 与 noClassDelfaultError的区别
  17. HOMEWORK1
  18. Openssl asn1parse命令
  19. JAVA面试题(8)
  20. Spark源码剖析 - SparkContext的初始化(五)_创建任务调度器TaskScheduler

热门文章

  1. 用navicat操作oracle新建表空间、用户名、密码
  2. robotframe添加自定义lib 报Importing test library ‘xxxx’ failed
  3. 六、Linux_SSH服务器状态
  4. ps aux|grep *** 解释
  5. 如何寻找sql注入漏洞?
  6. springboot整合mybatis及封装curd操作-配置文件
  7. CentOS7.5环境下搭建禅道
  8. JS中的this、apply、call、bind(经典面试题)
  9. 编程小白入门分享一:git的最基本使用
  10. 如何让VS像CB一样使用