У меня есть веб-API C# с использованием Entity Framework - я пытаюсь сделать запрос на размещение через свой угловой интерфейс, чтобы имитировать функцию проверки, но запрос не проходит.
Вот мой метод веб-API
[HttpPut("checkin/{id}")]
[AuthorizeRoles(Role.Administrator, Role.User)]
public async Task<IActionResult> CheckIn(int id)
{
var reservation = await context.Reservations.FindAsync(id);
var username = User.Identity.Name;
if (reservation == null)
return NotFound();
// Ensure user is checking-in their own reservation and its not already checked-in
if (reservation.UserName == username && reservation.CheckInDate == null)
{
reservation.CheckInDate = DateTime.Now;
var count = await context.SaveChangesAsync();
if (count < 1)
return StatusCode((int)HttpStatusCode.InternalServerError);
}
return Ok();
}
Вот мои два файла .ts, в которых инициируется запрос -Примечание: во втором методе я решил передать идентификатор вручную для целей тестирования
-checkIn(id: number){
if (confirm('Would you like to check in')) {
this.reservationService.checki(7);
};
}
Bookingservice.ts
checki(id: number) {
const headers = new Headers();
const url = `${this.url}+/checkin/${7}`;
return this.http
.put(url, JSON.stringify(7), {headers: headers})
.map(res => res.json());
}





С клиентом Angular HTTP все запросы Http являются Observables, что означает, что вам нужно подписаться на них, чтобы они вызывались.
Итак, в вашей функции проверки вам необходимо сделать следующее:
-checkIn(id: number){
if (confirm('Would you like to check in')) {
this.reservationService.checki(7).subscribe(res => {});
};
}
Нет необходимости явно обрабатывать ответ.
Что касается бэкэнда, обрабатывающего put, я бы посмотрел на этот ответ, я ни в коем случае не эксперт по C#. https://stackoverflow.com/a/32835329/8350917
Я внес указанное изменение, и запрос больше не зависает - однако я не верю, что метод был выполнен, потому что мой DbContext все тот же - я опубликовал свой полный метод веб-api checkIn. Я был бы признателен, если бы вы могли проверить это
Недавно была аналогичная проблема с запросами PUT на сервере. Оказалось, что WebDAV перехватывает запрос и вообще изводит себя. gavincoates.com/Archive/2016/07/…