В решении Asp Net Core у меня есть 4 проекта:
- HspFrontEnd — это проект AsP Net Core Mvc.
- OcelotGateway — пустой проект с пакетом Ocelot Nuget.
- BookingAppointmentApi — проект Asp Net Web Api для службы бронирования встреч.
- ConsultantCalendarApi — проект Asp Net Web Api, позволяющий проверять доступность календаря консультантов. li>
var consultantIdString = $"https://localhost:8884/consultants/chec ... Consultant" +
$"?consultantName={model.ConsultantName}";
var _httpClient = _httpClientFactory.CreateClient();
var consultantIdResponse = await _httpClient.GetAsync(consultantIdString);
В настоящее время model.ConsultantName = "Bob".
Но здесь:
consultantName = "GetGuidConsultant"
[HttpGet("checkAvailability/{consultantName}")]
public async Task GetGuidConsultant(string consultantName)
Я предоставляю вам файлы, которые считаю важными и которые помогут мне.
BookingController в HspFrontEnd:
[HttpPost]
public async Task Create(AppointmentDto appointment)
{
var content = new StringContent(JsonSerializer.Serialize(appointment), Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync("/gateway/appointments", content);
if (response.IsSuccessStatusCode)
{
_logger.LogInformation($"{response.StatusCode} : Appointment added successfully");
return RedirectToAction("Index");
}
else
{
_logger.LogError($"{response.StatusCode} : Something went wrong");
return View();
}
}
AppointmentDto в HspFrontEnd:
public class AppointmentDto
{
public Guid Id { get; set; }
public string PatientName { get; set; }
public string ConsultantName { get; set; }
public DateTime AppointmentDate { get; set; }
}
Контроллер AppointmentsController в BookingAppointmentApi:
[HttpPost]
public async Task CreateOneAppointment(AppointmentModel model)
{
if (model == null)
{
_logger.LogError("Invalid appointment data");
return NotFound();
}
var consultantIdString = $"https://localhost:8884/consultants/chec ... Consultant" +
$"?consultantName={model.ConsultantName}";
var _httpClient = _httpClientFactory.CreateClient();
var consultantIdResponse = await _httpClient.GetAsync(consultantIdString);
if (consultantIdResponse.IsSuccessStatusCode)
{
var consultantIdStringContent = await consultantIdResponse.Content.ReadAsStringAsync();
var consultantId = Guid.Parse(consultantIdStringContent);
var checkAvailabilityString = $"https://localhost:8884/consultantcalend ... ailability" +
$"?consultantId={consultantId}" +
$"&appointmentDate={model.AppointmentDate}";
var isAvailableResponse = await _httpClient.GetAsync(checkAvailabilityString);
if (isAvailableResponse.IsSuccessStatusCode)
{
var isAvailableStringContent = await isAvailableResponse.Content.ReadAsStringAsync();
var isAvailable = bool.Parse(isAvailableStringContent);
if (!isAvailable)
{
return BadRequest("Ko");
}
}
}
await _repository.CreateAppointmentAsync(model);
_logger.LogInformation($"New appointment created successfully at {DateTime.UtcNow.ToLocalTime()}");
return CreatedAtAction(nameof(GetOneAppointment), new { appointmentId = model.Id }, model);
}
Модель AppointmentModel в BookingAppointmentApi:
public class AppointmentModel
{
public Guid Id { get; set; }
public string PatientName { get; set; }
public string ConsultantName { get; set; }
public DateTime AppointmentDate { get; set; }
}
Контроллер консультантов в ConsultantCalendarApi:
[HttpGet("checkAvailability/{consultantName}")]
public async Task GetGuidConsultant(string consultantName)
{
_logger.LogInformation($"Consultant name: {consultantName}");
var consultant = await _repository.GetConsultantIdByNameAsync(consultantName);
if (consultant == null)
{
_logger.LogError($"Consultant {consultantName} not found");
return NotFound();
}
_logger.LogInformation($"Consultant {consultantName} retrieved successfully at {DateTime.UtcNow.ToLocalTime()}");
return Ok(consultant);
}
Метод GetGuidConsultant работает в Swagger.
В режиме отладки имя консультанта, введенное в пользовательский интерфейс, — Боб до тех пор:
var consultantIdString = $"https://localhost:8884/consultants/chec ... Consultant" +
$"?consultantName={model.ConsultantName}";
Подробнее здесь: https://stackoverflow.com/questions/782 ... ad-of-para
Мобильная версия