Pomóż mi znaleźć rozwiązanie problemu. Ani ja, ani mój przyjaciel nic nie warto.

Oryginalny kod (produkuje 404):

     //client
    private url = "https://localhost:44315/api/values";
 
    deleteMessage(id: number) {
        return this.http.delete(this.url + '/' + id);
    }

     //controller asp
    [HttpDelete("api/values/{messageId}")]
    public IActionResult Delete(int id)
    {
         if (_messager.GetMessageById(id) != null)
         {
            _messager.DeleteMessage(id);
            return Ok();
         }
         return NotFound();
    }

Później funkcja została przepisana (obecnie produkuje 405):

 deleteMessage(id: number) {
        return this.http.delete(this.url + '?id=' + id);
    }

Również jest problem, serwer dostaje NULL, a nie ciąg. Jeśli przekazujesz obiekt "wiadomości", to działa. Jeśli dodam atrybut [Frombody] do kodu ze sznurkiem, a następnie otrzymuję błąd 415.

Błąd na kliencie, prawidłowo działa Swagggera UI. Powiedz mi, co się stało.

createMessage(message: Message) {
     return this.http.post(this.url, message.msg);
    }

 //public IActionResult Add([FromBody] MessageModel message)
        public IActionResult Add(string message)
        {
            //if (ModelState.IsValid)
          //  {
                _messager.AddMessage(message);
                return Ok(message);
         //   }
         //   return BadRequest(ModelState);
        }
0
Boolean Autocrat 13 kwiecień 2021, 16:14

1 odpowiedź

Najlepsza odpowiedź

Powinieneś strugać danych i ustawić nagłówek HTTP content-type jako "application/json"

this.http
  .post(this.url, JSON.stringify(message.msg), {
    headers: new HttpHeaders({ "Content-Type": "application/json" })
  })

Następnie dodaj atrybut [Odbody] do parametru ciągów.

    public IActionResult Add([FromBody]string message)
    {
        //if (ModelState.IsValid)
        //{
              _messager.AddMessage(message);
              return Ok(message);
        //}
        //return BadRequest(ModelState);
    }
0
mj1313 14 kwiecień 2021, 08:32