嗨,需要帮助。想要获得webapi方法返回,并在要传递到视图的调用方方法中使用它。我想实现DRY Principle,将第二个webapi调用放在另一个方法中,并在foreach循环中只使用要增加的方法名称+参数,但我担心如何从调用方方法获得json返回并将其传递到视图,只需使用方法名称+参数,如下所示。
或者,重构下面代码的最佳方法是什么
// *** Calling First endpoint API to retrieve entire Employee List ***
HttpClient client = new HttpClient();
string APIdatas = null;
HttpResponseMessage response = await client.GetAsync("http://dummy.restapiexample.com/api/v1/employees");
if (response.IsSuccessStatusCode)
{
APIdatas = await response.Content.ReadAsStringAsync();
}
var employeeList = JsonConvert.DeserializeObject<List<EmployeeViewModel>>(APIdatas);
// *** Calling Second endpoint API to get Details for each Item per Id ***
// This below code needs to be refactorized in a single method
EmployeeDetailsModel stringJsonConv = null;
List<EmployeeDetailsModel> EmployeeDetailsList = new List<EmployeeDetailsModel>();
foreach (var item in employeeList.ToList())
{
Debug.WriteLine("ID TO PROCESS : " + item.Id);
HttpClient client2 = new HttpClient();
string APIdatas2 = null;
HttpResponseMessage response2 = await client2.GetAsync("http://dummy.restapiexample.com/api/v1/employee/" + item.Id);
if (response2.IsSuccessStatusCode)
{
APIdatas2 = await response2.Content.ReadAsStringAsync();
EmployeeDetailsModel EmployeeDetails = JsonConvert.DeserializeObject<EmployeeDetailsModel>(APIdatas2);
stringJsonConv = EmployeeDetails;
EmployeeDetailsList.Add(EmployeeDetails);
Debug.WriteLine("ID ALREADY PROCESSED : " + item.Id);
}
else
{
Debug.WriteLine("Error occurred, the status code is : {0}", response2.StatusCode);
}
}
//TempData["employeeList"] = EmployeeDetailsList;
return View(EmployeeDetailsList);
}
所以我想要实现的目标如下
//*调用第二个端点API以获取每个Id的每个项的详细信息*//下面的代码需要在单个方法中重构
EmployeeDetailsModel stringJsonConv = null;
List<EmployeeDetailsModel> EmployeeDetailsList = new List<EmployeeDetailsModel>();
foreach (var item in employeeList.ToList())
{
Debug.WriteLine("ID TO PROCESS : " + item.Id);
getEmployeeDetail(int item.Id) **//Second api call will be inside **getEmployeeDetail** method and called inside first webapi call... but how to get the json return from the second method to be post in this view?(first method)**
}
试试这个
foreach (var item in employeeList.ToList())
{
Debug.WriteLine("ID TO PROCESS : " + item.Id);
dynamic alist = getEmployeeDetail(int item.Id); //user var or listtype or dynamic
var json = JsonConvert.SerializeObject(alist ); //using newtonsoft.json
}
//this function will return the data in the List format
public List<EmployeeDetails> getEmployeeDetail(int id)
{
List<EmployeeDetails> emd=new List<EmployeeDetails>();
//call your api here
//check for the success code
return emd;
}