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

在QTCreator中,包含头文件:

#include 
#include 

定义变量:

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();
        }





你可能感兴趣的:(C#/.NET,QT)