ASP.NET Web API 2 - удалить из массива - PullRequest
0 голосов
/ 22 мая 2018

Я создаю свое первое приложение с ASP.NET Web api 2, просто для образовательных целей. Я хочу хранить данные в массиве (я знаю, было бы лучше в БД).Я написал несколько методов get, и они работают нормально, но я не знаю, почему DELETE не работает так, как я ожидал.

Я хотел бы удалить из массива Car с предоставленным идентификатором.После запуска действия он показывает мне, что Автомобиль с определенным идентификатором был удален, но когда я запускаю действие, которое показывает, что все автомобили в массиве кажутся, что автомобили все еще там.

Пожалуйста, найдите код для контроллера ниже.Кто-нибудь знает в чем причина?

using System; 
using Cars.Models;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace Cars.Controllers
{
    public class carsController : ApiController
    {
        List<Car> cars = new List<Car>(new Car[]
        {
            new Car { Id = 1, Name = "Opel", Price = 49999.9 },
            new Car { Id = 2, Name = "Fiat",  Price = 30000.0 },
            new Car { Id = 3, Name = "BMW",  Price = 100500.9 }
        });

        public HttpResponseMessage GetAllCars()
        {
            return Request.CreateResponse(HttpStatusCode.OK, cars);
        }


        [HttpDelete]
        [Route("api/cars/deletecar/{id}")]
        public IHttpActionResult DeleteCar(int id)
        {
           var car = cars.FirstOrDefault((p) => p.Id == id);
            if(car!=null)
            {
                for(int i=0;i<=cars.Count;i++)
                {
                    if (cars[i].Id==id)
                    {
                        cars.RemoveAt(i);

                       return Ok(cars );
                    }
                }

            }
            return NotFound();
        }
    }

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Поскольку ваш cars экземпляр списка создается для каждого запроса,

Вы должны сделать его статическим свойством и попробовать его

     static List<Car> cars = new List<Car>(new Car[]
    {
        new Car { Id = 1, Name = "Opel", Price = 49999.9 },
        new Car { Id = 2, Name = "Fiat",  Price = 30000.0 },
        new Car { Id = 3, Name = "BMW",  Price = 100500.9 }
    });
0 голосов
/ 22 мая 2018

Изменение не было присвоено исходной переменной.

if (cars[i].Id==id)
{
    cars = cars.RemoveAt(i);

    return Ok(cars);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...