Серверный проект Blazor

Я новичок в C#. Пытался вызвать rest api в проекте сервера Blazor, и я получил эту ошибку: JsonException: '<' - недопустимое начало значения. Путь: $ | LineNumber: 1 | BytePositionInLine: 0.

Моя служба:

    public class EmployeeService : IEmployeeService
    {
        private readonly HttpClient httpClient;

        public EmployeeService(HttpClient httpClient)
        {
            this.httpClient = httpClient;
        }
        public async Task<IEnumerable<Employee>> GetEmployees()
        {
             return await httpClient.GetJsonAsync<Employee[]>("api/employees");
           
        }
    }

Мой контроллер:

[Route("/api/[controller]")]
    [ApiController]
   
    public class EmployeesController : ControllerBase
    {
        private readonly IEmployeeRepository employeeRepository;

        //EmployeeRepository objemployee = new EmployeeRepository();

       public EmployeesController(IEmployeeRepository employeeRepository)
        {
            this.employeeRepository = employeeRepository;
        }

        [HttpGet]

        public async Task<ActionResult> GetEmployees()
        {
            try
            {
                return Ok(await employeeRepository.GetEmployees());
            }
            catch (Exception)
            {
                return StatusCode(StatusCodes.Status500InternalServerError, "Error retrieving data from DB");
            }
      }
}

2 ответа

Попробуйте что-нибудь подобное в своем EmployeeService, это поможет узнать, что пошло не так при отладке. Вы можете осмотретьresponse.ReasonPhrase для начала.

public async Task<IEnumerable<Employee>> GetEmployees()
    {

        var response = await httpClient.GetAsync("api/employees");
        if (response.IsSuccessStatusCode)
        {
            var result = await JsonSerializer.DeserializeAsync<Employee[]>(await response.Content.ReadAsStreamAsync(), new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
            return result;
        }
        else
        {
            //handle the response that was not successful here.
        }
    }

Вы получите исключение JsonException, когда нет сотрудников, использующих employeeRepository.GetEmployees().

Убедитесь, что ваш репозиторий сотрудников пуст или нет.

Или изменить

            return Ok(await employeeRepository.GetEmployees());

к

            return new JsonResult(await employeeRepository.GetEmployees());

JsonResult вернется json результат всякий раз, когда.




Пример вызова rest api на сервере Blazor

Коды контроллера

[Route("/api/[controller]")]
[ApiController]
public class EmployeesController : ControllerBase
{
    [HttpGet]
    [Route("/api/employees")]
    public async Task<ActionResult> GetEmployees()
    {
        var employees = new List<Employee>();

        Employee employee = new Employee();
        employee.Id = "1";
        employee.Name = "e1";
        employees.Add(employee);

        Employee employee2 = new Employee();
        employee2.Id = "2";
        employee2.Name = "e2";
        employees.Add(employee2);

        Employee employee3 = new Employee();
        employee3.Id = "3";
        employee3.Name = "e3";
        employees.Add(employee3);


        try
        {
            return Ok(employees);
        }
        catch (Exception)
        {
            return StatusCode(StatusCodes.Status500InternalServerError, "Error retrieving data from DB");
        }
    }
}

Коды обслуживания

public class EmployeeService
{

    public EmployeeService()
    {
    }

    public async Task<IEnumerable<Employee>> GetEmployees()
    {
        HttpClient httpClient = new HttpClient();
        var res =  await httpClient.GetJsonAsync<Employee[]>("https://localhost:44307/api/employees");
        return res;
    }

}

Проверка результата

Другие вопросы по тегам