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