C# ASP.NET WEB API: Не проходят POST и PUT операции

108
12 января 2022, 02:50

Возникла проблема при написании приложения: GET и DELETE операции проходят, а PUT и POST нет.

Есть база данных Cinema в MS SQL SERVER и таблица film. Она имеет такую структуру: id - fname - country - flength - fyear - genre. И хранимые процедуры: addFilm, deleteFilm, getAllFilms и updateFilm. В asp.net core написано простенькое приложение web api, которое должно выполнять CRUD операции с этой таблицей. Но выполняются только GET и DELETE! Привожу код DataController.cs. Помогите, пожалуйста! Не могу понять в чём проблема.

    [Produces("application/json")]
    [Route("api/data")]
    public class DataController : Controller
    {
        string connectionString = ConnectionString.CName;
        // GET api/data
        [HttpGet]
        public List<FilmsModel> Get()
        {
            List<FilmsModel> Films = new List<FilmsModel>();
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("getAllFilms", con);
                cmd.CommandType = CommandType.StoredProcedure;
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    FilmsModel film = new FilmsModel();
                    film.id = Convert.ToInt32(rdr["id"]);
                    film.fname = rdr["fname"].ToString();
                    film.country = rdr["country"].ToString();
                    film.flength = rdr["flength"].ToString();
                    film.fyear = rdr["fyear"].ToString();
                    film.genre = rdr["genre"].ToString();
                    Films.Add(film);
                }
                con.Close();
            }
            return Films;
        }
        // GET api/data/5
        [HttpGet("{id}")]
        public FilmsModel Get(int id)
        {
            FilmsModel film = new FilmsModel();
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                string sqlQuery = "SELECT * FROM Cinema.dbo.film WHERE id = " + id;
                SqlCommand cmd = new SqlCommand(sqlQuery, con);
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    film.id = Convert.ToInt32(rdr["id"]);
                    film.fname = rdr["fname"].ToString();
                    film.country = rdr["country"].ToString();
                    film.flength = rdr["flength"].ToString();
                    film.fyear = rdr["fyear"].ToString();
                    film.genre = rdr["genre"].ToString();
                }
            }
            return film;
        }
        // POST api/data
        [HttpPost]
        public void Post([FromBody]FilmsModel film)
        {
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("addFilm", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@fname", film.fname);
                cmd.Parameters.AddWithValue("@country", film.country);
                cmd.Parameters.AddWithValue("@flength", film.flength);
                cmd.Parameters.AddWithValue("@fyear", film.fyear);
                cmd.Parameters.AddWithValue("@genre", film.genre);
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
        // PUT api/data/5
        [HttpPut("{id}")]
        public void Put([FromBody]FilmsModel film)
        {
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("updateFilm", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@id", film.id);
                cmd.Parameters.AddWithValue("@fname", film.fname);
                cmd.Parameters.AddWithValue("@country", film.country);
                cmd.Parameters.AddWithValue("@flength", film.flength);
                cmd.Parameters.AddWithValue("@fyear", film.fyear);
                cmd.Parameters.AddWithValue("@genre", film.genre);
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
        // DELETE api/data/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("deleteFilm", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@id", id);
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
    }
Answer 1

Вопрос решен. Я неправильно отправлял запросы. Всё "заработало" после того, как я начал отправлять запросы через PowerShell, как показано в этой статье. Спасибо всем откликнувшимся!

READ ALSO
Как сделать цикл While по тикам

Как сделать цикл While по тикам

метод Update в c# выполняет определённый ряд действий каждый кадрПредроложим, что я хочу сделать медленное увеличение предмета

157
тип данных Char sql

тип данных Char sql

Всем привет, вопрос такого рода, в документации написано, что при записи в поле с типом данных CHAR(длинна), поле дополняется после текста пробелами,...

74
Таблица результатов Winforms

Таблица результатов Winforms

Подскажите пожалуйста, как в конструкторе Visual Studio можно сделать такую таблицу и добавлять в неё результаты работы программы?

68
RemoteEndPoint возвращает неверный порт

RemoteEndPoint возвращает неверный порт

Я создаю подобие серверного приложения с помощью TCPListenerКогда клиент подключается к серверу с помощью TCPClient, сервер должен определить адрес...

124