web-dev-qa-db-fra.com

Méthode de publication Web API 2 Http

Je suis dégoûté de ne pas avoir trouvé de solution à ce problème.

J'ai commencé à créer une nouvelle API à l'aide de l'API Web 2 et je n'arrive tout simplement pas à faire fonctionner POST et PUT. Les éléments uniques Get all et Get single fonctionnent parfaitement.

Il n'y a aucun article connexe nulle part, et ceux que j'ai trouvés ne concernent que Gets et l'API Web, mais pas l'API Web 2.

Toute aide ferait l'affaire s'il vous plaît.

    // POST: api/checkOuts
    [HttpPost]
    [ResponseType(typeof(checkOut))]
    [ApiExplorerSettings(IgnoreApi = true)]
    public async Task<IHttpActionResult> PostcheckOut(checkOut co)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.checkOuts.Add(checkOut);

        try
        {
            await db.SaveChangesAsync();
        }
        catch (DbUpdateException)
        {
            if (checkOutExists(checkOut.id))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }

        return CreatedAtRoute("DefaultApi", new { id = checkOut.id }, checkOut);
    }

Donc, fondamentalement, j'essaie simplement d'obtenir un débogage dans la méthode.

A été particulièrement déçu de ce lien car il couvrait presque tout, mais ai. http://www.asp.net/web-api/overview/web-api-routing-and-actions/create-a-rest-api-with-attribute-routing

Cordialement

13
DJJ

Ceci est un code de travail

        // POST api/values
        [HttpPost]
        [ResponseType(typeof(CheckOut))]
        public async Task<IHttpActionResult> Post([FromBody] CheckOut checkOut)
        {
            if (checkOut == null)
            {
                return BadRequest("Invalid passed data");
            }

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            db.checkOuts.Add(checkOut);

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (checkOutExists(checkOut.id))
                {
                    return Conflict();
                }
                else
                {
                    throw;
                }
            }

            return CreatedAtRoute("DefaultApi", new { id = checkOut.Id }, checkOut);
        }

J'ai déclaré que la classe CheckOut était comme ceci:

public class CheckOut
{
   public int Id { get; set; }
   public string Property2 { get; set; }
}

Les éléments clés ici sont:

1- Vous devez ajouter [FromBody] à votre méthode Api. 2- Je l'ai testé avec Fiddler, i- en choisissant POST. Ii- type de contenu: application/json. Iii- passant {"Id": 1, "Property2": "N'importe quoi"} dans le corps du message.

J'espère que cela pourra aider.

20
Omar.Alani