如何在ASP.Net MVC C#中获得方法(DRY原理)的返回值-重新分解



嗨,需要帮助。想要获得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;
}

最新更新