Home > OS >  HTTP client method null exception
HTTP client method null exception

Time:01-27

I have an API project and I need to develop a web project using the API I wrote some code but not able to find the exception and problem and not getting data from the link.

Here is my Service Code:

public async Task<IEnumerable<AgentReadDto>> GetAgent()
        {
            IEnumerable<AgentReadDto> agents = new List<AgentReadDto>();
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://localhost:44331/api/");

                var response = client.GetAsync("Agent/GetAllAgent");
                response.Wait();

                var result = response.Result;

                if (result.IsSuccessStatusCode)
                {
                    var readTask =JsonConvert.DeserializeObject<IList<AgentReadDto>>(await result.Content.ReadAsStringAsync());
                    agents = readTask;
                }
            }
            return agents;
        }

And my controller code is look like this:

public IActionResult AgentLists()
        {
            var agentsList = _agentRespositoryWeb.GetAgent();

            if (agentsList != null )
            {
                ViewBag.Message = "There was a problem retrieving agent from the database or no agents exists";
            }
            ViewBag.SuccessMessage = TempData["SuccessMessage"];
            return View(agentsList);
        }

My api return the value following:

 {
  "agentDetail": [
    {
      "usersId": 85,
      "firstName": "Amit",
      "lastName": "One",
      "gender": "Male",
      "informationTips": [
        {
          "video": "https://www.w3schools.com/html/movie.mp4"
        },
        {
          "video": "https://www.w3schools.com/html/movie.mp4"
        },
      ]
    },
    {
      "usersId": 86,
      "firstName": "Amit",
      "lastName": "Two",
      "gender": "Male",
      "informationTips": [
        {
          "video": "https://www.w3schools.com/html/movie.mp4"
        }
      ]
    }
  ]
}

For exception I added image there is three image that take screen on the different steps: Image at the time of repository

Image at the time of controller

Image at the finale execption

CodePudding user response:

Your model is set to IEnumerable<AgentReadDto>, but you've forgotten to await the call to GetAgent inside of the AgentLists action. This means there's a mismatch between what the view expects (IEnumerable<AgentReadDto>) and what it receives (Task<IEnumerable<AgentReadDto>>).

To fix this, convert AgentLists to an async method and then await the call to GetAgent. Here's a fixed version of the AgentLists action:

public async Task<IActionResult> AgentLists()
{
    var agentsList = await _agentRespositoryWeb.GetAgent();

    if (agentsList != null)
    {
        ViewBag.Message =
            "There was a problem retrieving agent from the database or no agents exists";
    }

    ViewBag.SuccessMessage = TempData["SuccessMessage"];
    return View(agentsList);
}

It looks like you also have a mismatch between the type you expect to be returned and the JSON actually being returned. The JSON represents an object with a list inside of it, but you're attempting to parse it as a simple list. To fix that, create a wrapper class that matches the structure of the response. For example, create the following class:

public class ApiResponse
{
   public IEnumerable<AgentReadDto> AgentDetail { get; set; }
}

Update the deserialization logic to use this new type:

var apiResponse = JsonConvert.DeserializeObject<ApiResponse>(...);
var agentsLit = apiResponse.AgentDetail;
  •  Tags:  
  • Related