zoukankan      html  css  js  c++  java
  • C#发起Http请求,调用接口

    https://www.cnblogs.com/itjeff/p/11883911.html

    //方法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;
    }

  • 相关阅读:
    Good Bye 2014 B. New Year Permutation(floyd )
    hdu 5147 Sequence II (树状数组 求逆序数)
    POJ 1696 Space Ant (极角排序)
    POJ 2398 Toy Storage (叉积判断点和线段的关系)
    hdu 2897 邂逅明下 (简单巴什博弈)
    poj 1410 Intersection (判断线段与矩形相交 判线段相交)
    HDU 3400 Line belt (三分嵌套)
    Codeforces Round #279 (Div. 2) C. Hacking Cypher (大数取余)
    Codeforces Round #179 (Div. 2) B. Yaroslav and Two Strings (容斥原理)
    hdu 1576 A/B (求逆元)
  • 原文地址:https://www.cnblogs.com/sunny3158/p/15008212.html
Copyright © 2011-2022 走看看