QT中以get,post方式调用后台web api接口(.NET开发)

2 篇文章 0 订阅

在QTCreator中,包含头文件:

#include <QNetworkRequest>
#include <QNetworkReply>

定义变量:

QNetworkAccessManager* m_pNAM;

申明槽函数:

protected slots:
    void finishedConnectTest(QNetworkReply *reply);

cpp文件中,以get方式调用web api:

m_pNAM = new QNetworkAccessManager(this);
void UploadManager::onTestConn(QString sServer)
{
    QObject::connect(m_pNAM, SIGNAL(finished(QNetworkReply*)),  this, SLOT(finishedConnectTest(QNetworkReply*)));

    QUrl url(sServer + "user/get");

    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json;charset=utf-8"));
    m_pNAM->get(request);
}
void UploadManager::finishedConnectTest(QNetworkReply *reply)
{
    QObject::disconnect(m_pNAM, SIGNAL(finished(QNetworkReply*)),  this, SLOT(finishedConnectTest(QNetworkReply*)));

    int iError = reply->error();
    if (iError == QNetworkReply::NoError)
    {
        QByteArray bytes = reply->readAll();
        QString string = QString::fromUtf8(bytes);
    }
    else
    {
    }
    reply->deleteLater();
}

以post方式调用web api:

void UploadManager::onUploadTest(QString sServer, int iRatio)
{


    QUrl url(sServer + "user/test");

    QByteArray data;
    data.fill('1', 1024*iRatio);
    QString strData = QString::fromUtf8(data);

    QByteArray array;
    array.append("{\"data\": \"" + strData + "\"}");


    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json;charset=utf-8"));

    if(m_bTesting)
    {
        m_pNAM->post(request, array);
    }
}
void UploadManager::finishedUploadTest(QNetworkReply *reply)
{
    int iError = reply->error();
    if (iError == QNetworkReply::NoError)
    {
        QByteArray bytes = reply->readAll();
        QString string = QString::fromUtf8(bytes);

        string.replace("\"", "");
        bool ok;
        int iCount = string.toInt(&ok, 10);
        if(ok)
        {
            m_dTotalByte += iCount;
        }


        emit signalUploadTest(m_sServer, m_iRatio);
    }

    reply->deleteLater();
}


后台web api 的实现:

        public string Get()
        {
            return "success";
        }


        public string test([FromBody]JObject data)
        {
            string obj = data.ToString();
            int len = obj.Length;
            return len.ToString();
        }

最后增加一个在后台web api接口中调用sql server存储过程的写法:

        public string upload([FromBody]JObject data)
        {
            if(data == null)
            {
                return "0";
            }
            string xmlData = data["data"].ToString();
            if(xmlData.Length<=0)
            {
                return "0";
            }

            Byte[] bytes = Convert.FromBase64String(xmlData);
            string obj = Encoding.UTF8.GetString(bytes);

            //Models.MyLog.WriteLog(obj);
            int len = obj.Length;

            //建立连接对象  
            SqlConnection cnn = new SqlConnection();
            cnn.ConnectionString = "Initial Catalog=ProductDataUpload;Data Source=192.168.1.2;User ID=PDURW;Password=adm1.0;";
            //打开连接  
            cnn.Open();

            //建立SqlParameter对象,代表存储过程的参数  
            SqlParameter prm;

            //建立执行对象  
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnn;

            //将类型指定为存储过程,并指定存储过程名称  
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "P_Xml_Update";

            //添加参数  
            prm = new SqlParameter();
            prm.ParameterName = "@xml"; 
            prm.SqlDbType = SqlDbType.Xml; 
            prm.Size = len;
            prm.Value = obj;
            prm.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(prm);

            //执行存储过程  
            int iRet = cmd.ExecuteNonQuery();
            return iRet.ToString();
        }





  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt是一个跨平台的C++应用程序开发框架,它可以用来开发各种类型的应用程序,包括桌面应用程序、移动应用程序以及嵌入式系统等。而WebAPI是指为开发者提供的一组用于与Web服务进行交互的接口,可以通过这些接口来获取数据、提交数据、调用远程方法等。 在Qt中,可以通过使用网络模块进行WebAPI调用Qt中的网络模块提供了一系列类和方法,可以方便地进行HTTP请求和响应的处理。可以使用类似QNetworkAccessManager、QNetworkRequest、QNetworkReply等类来发起HTTP请求,并通过信号与槽机制来处理响应结果。 具体来说,如果要在Qt调用WebAPI,可以按照以下步骤进行: 1. 创建一个QNetworkAccessManager对象,用于管理网络请求。可以通过该对象发送HTTP请求,并接收响应。 2. 创建QNetworkRequest对象,设置请求的URL以及其他的请求头信息。 3. 调用QNetworkAccessManager的get()或post()方法,发送HTTP请求。可以通过这些方法来发送GET请求或POST请求,并将请求数据传递给WebAPI。 4. 通过信号与槽机制,监听QNetworkAccessManager对象发出的信号,以获取请求的响应结果。 5. 解析响应结果,并根据需要进行处理。可以使用QNetworkReply对象的相关方法,如readAll()来获取响应数据,并进行解析和处理。 总之,Qt提供了丰富的网络模块,可以方便地进行WebAPI调用开发者可以根据具体的需求,使用Qt提供的类和方法来实现与Web服务的交互,并获取相应的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值