这个的实现方法与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
这样就完全实现了授权服务的服务端调用