【问题标题】:How to get the return value of a method (DRY Principle) in ASP.Net MVC C# - Re-Factorization如何在 ASP.Net MVC C# 中获取方法的返回值(DRY 原则) - 重构
【发布时间】:2019-10-29 06:27:01
【问题描述】:

您好,需要一些帮助。 想要获取 webapi 方法返回并在调用者方法中使用它来传递给查看。我想实现 DRY 原则以将第二个 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)**


        }                

【问题讨论】:

    标签: c# asp.net-mvc asp.net-web-api


    【解决方案1】:

    试试这个

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多