Функция обновления не работает с Angular и WEB API - PullRequest
0 голосов
/ 20 июня 2019

Я делаю пример CRUD с точечным углом и углом. Я сделал функцию в бэкэнде так:

CarController.cs

 [Route("UpdateCar")]
        [HttpPut]
        public IActionResult Put([FromBody] Car car, long id)
        {
            var c = _context.Cars.First(e => e.CarId == id);
            c.Brand = car.Brand;
            c.Color = car.Color;
            c.Model = car.Model;
            c.LastChange = DateTime.Now;
            c.TopSpeed = car.TopSpeed;
            _context.SaveChanges();
            return Ok();
        }

Iя вызываю этот метод в моем автосервисе так:

 updateCar(carvm: CarVM): Observable<CarVM> {
   const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };
    return this.http.put<CarVM>(this.baseUrl, carvm, httpOptions)
  }

И я использую этот метод, чтобы получить конкретную машину:

 getCarById(carId: string): Observable<CarVM> {
    return this.http.get<CarVM>(this.baseUrl + "/UpdateCar?id=" + carId)
  }

Я вызываю этот метод в своем компоненте так:

EditCar(CarId: string) {
    this.carservice.getCarById(CarId).subscribe(Response => {
      this.dataSaved = false;
      this.Carid = Response.CarId;
      this.FormCar.controls['Brand'].setValue(Response.Brand);
      this.FormCar.controls['Model'].setValue(Response.Model);
      this.FormCar.controls['Color'].setValue(Response.Color);
      this.FormCar.controls['TopSpeed'].setValue(Response.TopSpeed);
    })
  }

И наконец я связал это так:

<button type="button" class="btn btn-primary mr-1" (click)="EditCar(car.carId)">Edit</button>

В моем приложении CRUD работает создание, удаление, чтение.Когда я нажимаю на кнопку, в моем устройстве Google появляется сообщение об ошибке:

screenshot

Поля не будут заполнены для редактирования, но я получаюЯ БЫ.Я попробовал несколько решений, но у меня это не сработало.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Ошибка в консоли показывает код состояния 405, который означает:

405 Method Not Allowed

Это обычно указывает на то, что вы используете неправильный HTTP-глагол для вашего запроса.Вы делаете запрос GET к конечной точке, которая имеет атрибут HttpPut, поэтому ожидает запрос PUT.

Я предполагаю, что метод getCarById() привязывается к неверной конечной точке API на сервере.(этот: [Route("UpdateCar")] [HttpPut] public IActionResult Put([FromBody] Car car, long id)

0 голосов
/ 20 июня 2019

Вы получаете ошибку в запросе GET.В GET измените id=" + carId на /" + carId

  getCarById(carId: string): Observable<CarVM> {
    return this.http.get<CarVM>(this.baseUrl + "/UpdateCar/" + carId)
  }

Кроме того, поскольку Angular5 , нам не нужно передавать httpOptions

Попробуй так:

 updateCar(carvm: CarVM): Observable<CarVM> {
    return this.http.put<CarVM>(this.baseUrl, carvm)
  }
...