Серверный проект 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;
}
}
Проверка результата