DELPHI vcl fmx访问restful服务器(客户端+服务端)

//delphi 调用代码  只演示了简单查询的代码,分页查询代码类似
procedure Tform1.button1Click(Sender: TObject);
var
  jo:ISuperObject;
 json,_message:string;
 _result:string;
 _msg,_res:string;
   reqData, resData:Tstringstream;
vHttp: Tnethttpclient;
ja:iSuperArray;
begin
    jo:=SO();
    jo.S['keystore']:='xxx';
    jo.S['method']:='simplequery';
    jo.S['sql']:='select * from employee where id=2';
  try
    vHttp := Tnethttpclient.Create(nil);
    reqData := TStringStream.Create(jo.AsJSON);
    resData := TStringStream.Create('',TEncoding.GetEncoding(65001));
    try
     with vHttp do
       begin
        ConnectionTimeout := 20000;
        ResponseTimeout := 100000;
        AcceptCharSet := 'utf-8';
        AcceptEncoding := '65001';
        AcceptLanguage := 'zh-CN';
        ContentType := 'application/json';
        UserAgent := 'Embarcadero URI Client/1.0';
       end;
      vHttp.Post('http://localhost:59223/api/remote', reqData, resData);
      json :=resData.DataString.Trim;
       jo:=SO(json);
       ja:=jo.A['data'];
       TConverter.New.JSON.Source(ja).ToDataSet(clientdataset1);//转换为clientdataset
    except
     on e:exception do
     begin
      jo:=SO();
      jo.S['result']:='-1';
      jo.S['message']:=e.Message.Trim;
      json:=jo.AsJSON();
     end;
    end;
  finally
    reqData.Free;
    resData.Free;
    FreeAndNil(vHttp);
  end;
end;

//asp.net core 服务器webapi控制器,asp.net可以配置在 win  linux mac上面
//在windows上面可以架设在IIS上 其他平台请自行查找
//可以nginx来提高并发量,可以满足大型或小型的服务需求
 public class RemoteController : Controller
    {
        private readonly Chloe.IDbContext _dbContext;
        private IHostingEnvironment _environment;
        private IConfiguration _configuration;
        public RemoteController(Chloe.IDbContext dbContext, IHostingEnvironment environment, IConfiguration Configuration)
        {
            _dbContext = dbContext;
            _environment = environment;
            _configuration = Configuration;
        }

        // POST api/<controller>
        [HttpPost]
        public string Post([FromBody] JObject _value)
        {
            StringBuilder builder = new StringBuilder();
            JObject jo = _value;
            string keystore = jo.Value<string>("keystore");
            string method = jo.Value<string>("method").Trim();
            string _result = "";
            if (keystore == null)
            {
                builder.Append("{");
                builder.Append("\"result\":\"1\",");
                builder.Append("\"message\":\"验证失败\"");
                builder.Append("}");

                return builder.ToString();
            }
           if (keystore != _configuration.GetSection("KeysString")["webapiKeyStore"])  //传入的keystore和configuration中的是否一致
            {
                builder.Append("{");
                builder.Append("\"result\":\"1\",");
                builder.Append("\"message\":\"验证失败\"");
                builder.Append("}");
                return builder.ToString();
            }
            if (jo == null)
            {
                builder.Append("{");
                builder.Append("\"result\":\"1\",");
                builder.Append("\"message\":\"传入参数错误\"");
                builder.Append("}");
                return builder.ToString();
            }
            switch (method)
            {
                case "0":  //判断网络是否畅通
                    builder.Append("{");
                    builder.Append("\"result\":\"9\",");
                    builder.Append("\"message\":\"网络畅通\"");
                    builder.Append("}");
                    _result = builder.ToString();
                    break;
                case "simplequery"://简单sql查询
                    _result = _simplequery(jo);
                    break;
                case "execsql"://执行sql语句
                    _result = _execsql(jo);
                    break;
                case "pagequery"://分页查询
                    _result = _pagequery(jo);
                    break;
                case "openproc"://存储过程查询
                    _result = _openproc(jo);
                    break;
                case "execproc"://存储过程执行
                    _result = _execproc(jo);
                    break;
                default:
                    builder.Append("{");
                    builder.Append("\"result\":\"1\",");
                    builder.Append("\"message\":\"操作错误\"");
                    builder.Append("}");
                    _result = builder.ToString();
                    break;
            }

            return _result;
        }

        private string _simplequery(JObject _jo)//简单sql查询
        {
            StringBuilder builder = new StringBuilder();
            try
            {
                string _sql = _jo.Value<string>("sql");  //获取sql语句
                //var result = _dbContext.SqlQuery<dynamic>(_sql).ToList().Skip((1 - 1) * 10).Take(10);  //分页查询
                var result = _dbContext.SqlQuery<dynamic>(_sql).ToList();  
                if (result == null)
                {
                    builder.Append("{");
                    builder.Append("\"result\":\"1\",");
                    builder.Append("\"message\":\"执行sql语句错误\"");
                    builder.Append("}");
                    return builder.ToString();
                }
                int _count = result.Count();
                string _json = JsonConvert.SerializeObject(result);
                builder.Append("{");
                builder.Append("\"result\":\"0\",");
                builder.Append("\"message\":\"\",");
                builder.Append("\"count\":" + _count + ",");
                builder.Append("\"data\":");
                builder.Append(_json);
                builder.Append("}");
                return builder.ToString();
            }
            catch (Exception e)
            {
                builder.Append("{");
                builder.Append("\"result\":\"1\",");
                builder.Append(string.Format("\"message\":\"{0}\"", e.Message));
                builder.Append("}");
                return builder.ToString();
            }

        }

        private string _execsql(JObject _jo)//执行sql语句
        {
            StringBuilder builder = new StringBuilder();
            try
            {
                string _sql = _jo.Value<string>("sql");  //获取sql语句
                int _count = _dbContext.Session.ExecuteNonQuery(_sql);
                if (_count == 0)
                {
                    builder.Append("{");
                    builder.Append("\"result\":\"1\",");
                    builder.Append("\"message\":\"执行sql语句错误\"");
                    builder.Append("}");
                    return builder.ToString();
                }
                else
                {
                    builder.Append("{");
                    builder.Append("\"result\":\"0\",");
                    builder.Append("\"message\":\"执行成功\"");
                    builder.Append("}");
                    return builder.ToString();
                }
            }
            catch (Exception e)
            {
                builder.Append("{");
                builder.Append("\"result\":\"1\",");
                builder.Append(string.Format("\"message\":\"{0}\"",e.Message));
                builder.Append("}");
                return builder.ToString();
            }
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值