C#winform调用接口实例

本文主要介绍了C#winform调用接口实例相关的知识,希望对大家有一定的参考价值。
1、C#winform 调用webserver 接口

try
                string company = string.Empty;
                string str_ ="dd";
                company = SalTransaction.DbValSelect(str_, false);
                ProductLogist.LogisticServiceClient client = new ProductLogist.LogisticServiceClient();  //引用wcf接口
                ProductLogist.LogisticInfoRequest req = new ProductLogist.LogisticInfoRequest()
                    OrderNo = orderNo,
                    CompanyID = company,
                    Address = address,
                    LinkMan = contact,
                    Tel = tel,
                    Dcode = this.txtsMasterdataSourceBindingRegionDesc.Text,
                    LogisticsCompany = logisticsCompany,
                    Logistics = currEntity.ship_method
                ;
                ProductLogist.LogisticInfoResponse sponse = client.LogisticInfo(req);
                if (sponse.LogisticInfoResult.IsOK == "E")
                    if (!sponse.LogisticInfoResult.Message.Contains("不存在该订单"))
                        SalMessage.Error("推送生产系统失败:" + sponse.LogisticInfoResult.Message);
                        return;
            catch (Exception ex)
                SalMessage.Error("推送生产系统异常!");
                return;

2、C#winform 调用api接口传图multipart/form-data 类型的接口
filePath-是打开弹窗后选择的图片
url-接口地址

try
                    
                        string fileName_key_ = "kekename\\\\" + Path.GetFileName(filePath);
                        string access_token = "fz434507768345eb7a8e97897";
                        byte[] fileContentByte = new byte[1024]; // 文件内容二进制
                        #region 将文件转成二进制
                        FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                        fileContentByte = new byte[fs.Length]; // 二进制文件
                        fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length));
                        fs.Close();
                        #endregion

                        #region 定义请求体中的内容 并转成二进制  *********************************************************      重点 :拼接参数 *******************************************************
                        string boundary = "ceshi";
                        string Enter = "\\r\\n";
                        //string modelIdStr = "--" + boundary + Enter
                        //        + "Content-Disposition: form-data; name=\\"modelId\\"" + Enter + Enter
                        //        + modelId + Enter;

                        string fileContentStr = "--" + boundary + Enter
                                + "Content-Type:application/octet-stream" + Enter
                                + "Content-Disposition: form-data; name=\\"file\\"; filename=\\"" + filePath + "\\"" + Enter + Enter;

                        string updateTimeStr = Enter + "--" + boundary + Enter
                                + "Content-Disposition: form-data; name=\\"key\\"" + Enter + Enter
                                + fileName_key_;

                        string encryptStr = Enter + "--" + boundary + Enter
                                + "Content-Disposition: form-data; name=\\"access_token\\"" + Enter + Enter
                                + access_token + Enter + "--" + boundary + "--";

                        // var modelIdStrByte = Encoding.UTF8.GetBytes(modelIdStr);//modelId所有字符串二进制
                        var fileContentStrByte = Encoding.UTF8.GetBytes(fileContentStr);//fileContent一些名称等信息的二进制(不包含文件本身)
                        var updateTimeStrByte = Encoding.UTF8.GetBytes(updateTimeStr);//updateTime所有字符串二进制
                        var encryptStrByte = Encoding.UTF8.GetBytes(encryptStr);//encrypt所有字符串二进制
                        #endregion *********************************************************      重点 :拼接参数 *******************************************************


                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                        request.Method = "POST";
                        request.ContentType = "multipart/form-data;boundary=" + boundary;

                        Stream myRequestStream = request.GetRequestStream();//定义请求流

                        #region 将各个二进制 安顺序写入请求流 modelIdStr -> (fileContentStr + fileContent) -> uodateTimeStr -> encryptStr
                        // myRequestStream.Write(modelIdStrByte, 0, modelIdStrByte.Length);
                        myRequestStream.Write(fileContentStrByte, 0, fileContentStrByte.Length);
                        myRequestStream.Write(fileContentByte, 0, fileContentByte.Length);
                        myRequestStream.Write(updateTimeStrByte, 0, updateTimeStrByte.Length);
                        myRequestStream.Write(encryptStrByte, 0, encryptStrByte.Length);
                        #endregion

                        HttpWebResponse response = (HttpWebResponse)request.GetResponse();//发送
                        Stream myResponseStream = response.GetResponseStream();//获取返回值
                        StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));

                        string retString = myStreamReader.ReadToEnd();
                        myStreamReader.Close();
                        myResponseStream.Close();

                        JObject jo = (JObject)JsonConvert.DeserializeObject(retString);
                        string Code = jo["code"].ToString();
                        string desc = jo["desc"].ToString();
                        string data = jo["data"].ToString();
                        JObject datajson = (JObject)JsonConvert.DeserializeObject(data);
                        string file_url_ = datajson["file_url"].ToString();
                        if (Code == "0")
                        
                            UpdateImgSerialInfo("5", file_url_);
                        
                        else
                        
                            SalMessage.Error("上传图片失败,接口返回:" + desc);
                        

                    
                    catch(Exception ex)
                    
                        SalMessage.Error("上传图片出错:" + ex);

3、普通API调用 application/json 类型
调用方式如下:

   StringBuilder strJSON = new StringBuilder();                

                strJSON.Append(" \\"TenantID\\":\\"20191022172020\\",");
                strJSON.Append("\\"TimeStamp\\":\\"\\",");
                strJSON.Append(" \\"AppID\\":\\"\\"");
                strJSON.Append("");
                string key_ = postApi("http://192.172.10.14:8999/MES/v1/Auth/GetSign", strJSON.ToString());


 //组装请求参数
    private string BuildQuery(IDictionary<string, string> parameters, string encode)
    
        StringBuilder postData = new StringBuilder();
        bool hasParam = false;
        IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
        while (dem.MoveNext())
        
            string name = dem.Current.Key;
            string value = dem.Current.Value;
            // 忽略参数名或参数值为空的参数
            if (!string.IsNullOrEmpty(name))
            
                if (hasParam)
                
                    postData.Append("&");
                
                postData.Append(name);
                postData.Append("=");
                if (encode == "gb2312")
                
                    postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312")));
                
                else if (encode == "utf8")
                
                    postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));
                
                else
                
                    postData.Append(value);
                
                hasParam = true;
            
        
        return postData.ToString();
    




    private string postApi(string url, string strJSON)
    
        HttpWebRequest requestScore = null;
        Stream stream = null;
        StreamReader reader = null;
        HttpWebResponse responseSorce = null;
        try
        

            requestScore = (HttpWebRequest)WebRequest.Create(url);
            byte[] data = Encoding.UTF8.GetBytes(strJSON.ToString());
            requestScore.Method = "Post";
            requestScore.ContentType = "application/json"; // "application/x-www-form-urlencoded";
            requestScore.ContentLength = data.Length;
            requestScore.KeepAlive = true;

            stream = requestScore.GetRequestStream();
            stream.Write(data, 0, data.Length);
            stream.Close();
            responseSorce = (HttpWebResponse)requestScore.GetResponse();
            reader = new StreamReader(responseSorce.GetResponseStream(), Encoding.UTF8);
            string content = reader.ReadToEnd();
            return content;
        
        catch (Exception ex)
        
            return ex.Message;
        
        finally
        
            requestScore = null;
            if (responseSorce != null)
            
                responseSorce.Close();
                responseSorce = null;
            
            if (reader != null)
            
                reader.Close();
                reader.Dispose();
                reader = null;
            
            if (stream != null)
            
                stream.Close();
                stream.Dispose();
                stream = null;

4、.net 调用webapi

 string url = ConfigurationManager.AppSettings["WordD"].ToString();
            int i = 0;
            ResOrderForWork ForWork = null;
            StringBuilder strJSON = new StringBuilder();
            try
            
                strJSON.Append("data= \\"CustomerPhone\\":\\"" + req.CustomerPhone + "\\",");
                strJSON.Append("\\"OrderNo\\":\\"" + req.OrderNo + "\\",");
                strJSON.Append(" \\"PayStatus\\":\\"" + req.PayStatus + "\\",");
                strJSON.Append("\\"OrderLine\\":[");
                foreach (var r in req.OrderLine)
                
                    i++;

                    if (req.OrderLine.Count == i)
                    
                        strJSON.Append("\\"PlateTaskNo\\":\\"" + r.PlateTaskNo + "\\",\\"OrderLineNo\\":\\"" + r.OrderLineNo + "\\"");
                    
                    else
                    
                        strJSON.Append("\\"PlateTaskNo\\":\\"" + r.PlateTaskNo + "\\",\\"OrderLineNo\\":\\"" + r.OrderLineNo + "\\",");
                    
                
                strJSON.Append("]");
                strJSON.Append("");
                HttpClient httpClient = new HttpClient();
                HttpResponseMessage response = httpClient.PostAsync(url, new StringContent(strJSON.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded")).Result;
                JObject jo = (JObject)JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
                var Code = jo["code"].ToString();
                var desc = jo["desc"].ToString();
                var Message = jo["message"].ToString();
                ForWork = new ResOrderForWork()
                
                    Code = Code,
                    desc = desc,
                    Message = Message
                ;
            
            catch (Exception e)
            
                Common.Log.InsertMessage("[调接口异常 : " + e);

以上是关于C#winform调用接口实例的主要内容,如果未能解决你的问题,请参考以下文章

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 在C# WinForm窗体中,如果你想要在表格控件上填充颜色,但是鼠标经过其他控件时整个表格里的数据都变了,可能是因为你在窗体上直接绘制了表格,而没有使用自定义控件来解决这个问题。\[1\] 你可以尝试使用自适应类来解决这个问题。首先,将自适应类的代码复制到你的工程命名空间中,然后声明自适应类的实例。接下来,在窗体上添加SizeChanged事件,并在事件方法中记录窗体和控件的初始位置和大小。最后,调用自适应类的自适应方法,完成自适应。这样,你就可以在表格控件上填充颜色而不会受到其他控件的影响了。\[2\] 你还可以使用Panel、DataGridView等控件来实现自适应。\[2\] 在窗体的代码中,你需要引入System、System.Collections.Generic、System.ComponentModel、System.Drawing和System.Windows.Forms这些命名空间,并在窗体的Load事件中调用自适应类的初始化方法,记录窗体和控件的初始位置和大小。然后,在窗体的SizeChanged事件中调用自适应类的自适应方法,完成自适应。\[3\] 这样,你就可以在C# WinForm窗体中使用表格控件,并且实现自适应的效果了。 #### 引用[.reference_title] - *1* [C#自定义控件实现窗体绘制表格](https://blog.csdn.net/qq_22955427/article/details/76252582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C# WinForm 窗体及其控件的自适应](https://blog.csdn.net/chbxgbin/article/details/109690260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值