服务端调用另一个netcore webapi服务的实现

本文详细介绍了如何在.NET Core WebAPI中实现服务调用,对比了与传统Web服务调用的区别。通过HttpClientHelper类的HttpPost方法调用授权服务,进行授权验证。代码示例展示了从CPU、主板和物理内存信息构造请求,到获取并解析响应的过程,实现了客户端和服务端的交互。
摘要由CSDN通过智能技术生成

这个的实现方法与webservice调用的方法完全不同。服务端调用webservice服务,使用的是system.net的webclient类的操作方法实现。而netcore webapi的调用使用的是system.net.http来实现

 

要调用的netcore webapi方法如下:

[AllowAnonymous]
        [HttpPost]
        [Route("")]
        public JsonResult ValidateUser([FromBody] UserLogin request)
        {
            logger.Info($"【ValidateUser request】:{JsonConvert.SerializeObject(request)}");

            var code = Computer.AuthorizationCode(request.Cpu, request.MotherBoard, request.PhysicalMemory);
            var manager = new CustomerVerifyManager();
            var model = manager.GetList(it => it.AuthorizationCode == code).FirstOrDefault();
            var res = new ApiResponse();
            if (model == null)
            {
                res.Code = 200;
                res.IsSuccess = true;
                res.ErrMsg = "";
                res.Data = new CustomerVerify { Id = 0, Ip = "0.0.0.0", IsAuthorization = 1, AuthorizationCode = code };
            }
            else
            {
                res.Code = 200;
                res.IsSuccess = true;
                res.ErrMsg = "";
                res.Data = model;
            }
            logger.Info($"【ValidateUser res】:{JsonConvert.SerializeObject(res)}");
            return Json(res);
        }

访问的webapi地址为: api/user

在HttpClientHelper类中post调用方法的实现:

/// <summary>
        /// HttpClient实现Post请求
        /// </summary>
        public static string DoPost(string url)
        {


            string result = "";
            var obj = new UserLoginInfo
            {
                Cpu = Computer.CpuID,
                MotherBoard = Computer.MotherboardID,
                PhysicalMemory = Computer.TotalPhysicalMemory

            };
            using (HttpClient httpClient = new HttpClient())
            {
                //post方式
                //参数
                var content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");
                HttpResponseMessage response = httpClient.PostAsync(url, content).Result;
                //确保Http响应成功
                if (response.IsSuccessStatusCode)
                {
                    result = response.Content.ReadAsStringAsync().Result;
                }
            }
            return result;

        }

这里构造的obj对象就是

public JsonResult ValidateUser([FromBody] UserLogin request) 中的UserLogin 对象。其实现的是一个授权服务

难点就是这个方法的构造,若没有接触过需要大量时间尝试

方法中的调用比较简单:

#region 授权           
            var validateResult = HttpClientHelper.DoPost(validServiceUrl + "/api/user");
            Console.WriteLine($"【ValidateUser】validateResult:{validateResult}");
            logger.Info($"【validateResult】:{validateResult}");
            if (validateResult == "")
            {
                var res1 = new ApiResponse
                {
                    Code = 200,
                    IsSuccess = false,
                    ErrMsg = "授权失败"

                };
                return Json(res1);
            }
            else
            {
                var resAuthorize = JsonConvert.DeserializeObject<ApiResponse>(validateResult);
                if (!resAuthorize.IsSuccess)
                {
                    var res1 = new ApiResponse
                    {
                        Code = 200,
                        IsSuccess = false,
                        ErrMsg = "授权失败"

                    };
                    return Json(res1);
                }
                logger.Info($"【授权成功】:{validateResult}");
            }
            #endregion

这样就完全实现了授权服务的服务端调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值