Web API 2 Http Post方法

DJJ*_*DJJ 12 c# asp.net-web-api2

我很反感没有找到解决这个问题的方法.

我开始使用Web API 2创建一个新的api,但是无法使POST和PUT工作.Get all和Get单项非常适合.

在任何地方都没有相关文章,我发现的那些文章只涉及到获取和Web API,而不涉及Web API 2.

任何帮助都可以.

    // 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);
    }
Run Code Online (Sandbox Code Playgroud)

所以基本上,我只是试图调试方法.

在这个链接中特别失望,因为它涵盖了几乎所有内容,但是ai.http://www.asp.net/web-api/overview/web-api-routing-and-actions/create-a-rest-api-with-attribute-routing

问候

Oma*_*ani 19

这是一个有效的代码

        // 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);
        }
Run Code Online (Sandbox Code Playgroud)

我已经声明CheckOut类是这样的:

public class CheckOut
{
   public int Id { get; set; }
   public string Property2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这里的关键是:

1-您需要将[FromBody]添加到Api方法中.2-我用Fiddler测试了它,我选择了POST动作.ii- content-type:application/json.iii-在消息正文中传递{"Id":1,"Property2":"Anything"}.

希望有所帮助.