zoukankan      html  css  js  c++  java
  • 接口调用

    private static readonly string ServiceUrl = ConfigurationManager.AppSettings["ServiceUrl"];
    /// <summary>
    /// 字符编码
    /// </summary>
    private readonly Encoding _DefaultEncoding = Encoding.UTF8;

    /// <summary>
    /// 发送请求,获取返回值
    /// </summary>
    /// <param name="requestData">请求对象</param>
    /// <returns></returns>
    public CheckResponse GetCheckResponse(string url, CheckPersonInfoInput requestData)
    {
    string postString = GetFormStr(requestData);

    //string json = JsonHelper.ObjectToJson(requestData);//完整参数
    byte[] bs = _DefaultEncoding.GetBytes(postString);
    string requsetUrl = ServiceUrl  + url;

    //创建http请求
    HttpWebRequest webRequest = CreateHttpWebRequest(requsetUrl);
    webRequest.Method = "POST";
    webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.ContentLength = bs.Length;
    using (Stream reqStream = webRequest.GetRequestStream())
    {
    reqStream.Write(bs, 0, bs.Length);
    }

    HttpWebResponse webResponse;
    try
    {
    //获取响应
    webResponse = (HttpWebResponse)webRequest.GetResponse();
    }
    catch (WebException ex)
    {
    //返回值非200 会有异常
    //若服务端在调用不成功时,会修改响应status,需要在这里获取HttpWebResponse
    //webResponse = (HttpWebResponse)ex.Response;

    throw new ApiException("002", "调用接口错误:" + ex.Status + " " + ex.Message);
    }

    Stream responseStream = webResponse.GetResponseStream();

    if (webResponse.ContentEncoding.ToLower().Contains("gzip"))
    {
    //gzip格式
    responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
    }
    string responseString = "";
    using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
    {
    responseString = reader.ReadToEnd();
    }
    if (responseString != null && responseString.Length > 0)
    {
    CheckResponse responseObj = JsonHelper.JsonToObject<CheckResponse>(responseString);

    if (responseObj.respCode == "0000"|| responseObj.respCode == "0001")
    {
    return responseObj;
    }
    else
    {
    throw new ApiException("001", responseObj.resTxnId);
    }
    }
    else
    {
    throw new Exception("调用接口错误,没有返回值");
    }
    }

    /// <summary>
    /// 创建请求
    /// </summary>
    /// <param name="url">地址</param>
    /// <returns></returns>
    private static HttpWebRequest CreateHttpWebRequest(string url)
    {
    HttpWebRequest request;
    //如果是发送HTTPS请求
    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
    {
    //ServicePointManager.DefaultConnectionLimit = 1000;
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version11;
    }
    else
    {
    request = WebRequest.Create(url) as HttpWebRequest;
    }
    request.Proxy = null;
    request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");//若支持压缩 注意需要给在获取响应时解压
    return request;
    }

    /// <summary>
    /// https 校验证书
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="certificate"></param>
    /// <param name="chain"></param>
    /// <param name="errors"></param>
    /// <returns></returns>
    private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
    {
    //todo 验证对方证书
    return true; //总是接受
    }

    private static string GetFormStr(CheckPersonInfoInput input)
    {
    string postString = "";
    StringBuilder sb = new StringBuilder();
    Type t = input.GetType();//获得该类的Type

    foreach (var pi in t.GetProperties())
    {
    var name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作
    var value = pi.GetValue(input, null);//用pi.GetValue获得值
    sb.AppendFormat("{0}={1}", name, value);
    sb.Append("&");
    }
    postString = sb.ToString().Trim('&');
    return postString;
    }

  • 相关阅读:
    python3之Django内置模板标签和过滤器
    JavaScript(1)
    python3之Django基础篇
    CSS
    HTML
    python3之SQLAlchemy
    python3之memcached
    web服务器-nginx虚拟主机
    web服务器-nginx默认网站
    web服务器-Nginx下载限速
  • 原文地址:https://www.cnblogs.com/luoxiaoxiao102/p/12564929.html
Copyright © 2011-2022 走看看