Restful WebApi V2放置问题

时间:2015-08-21 14:46:43

标签: asp.net-web-api2

我无法理解为什么我的WebApi在发布时返回成功(200),但在我放置时没有返回任何内容。两者都成功更新了数据库。

我已经为这两种方法附加了我的代码。 谢谢 保罗

    // PUT: api/items/5
    [Route("api/items/{id:int}")]
    [ResponseType(typeof(void))]
    public async Task<IHttpActionResult> PutItem([FromBody] Item[] item, string updateitems)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        foreach (Item i in item)
        {
            if (updateitems.IndexOf(i.ItemId.ToString()) > 0)
            {
                db.Entry(i).State = EntityState.Modified;
            }
        }
        await db.SaveChangesAsync();

        var iStatus = StatusCode(HttpStatusCode.OK);
        return iStatus;
    }

    // POST: api/items
    [Route("api/items")]
    [ResponseType(typeof(Item))]
    public async Task<IHttpActionResult> PostItem([FromBody] Item[] item)
    {
        int itemCount = 0;
        string edititems = "";

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

        foreach (Item i in item)
        {
            if (!ItemExists(i.SurveyId, i.LineId))
            {
                db.Items.Add(i);
            }
            else
            {
                var id = FindItemId(i.SurveyId, i.LineId);
                edititems = edititems + ',' + id.ToString();
                i.ItemId = id;
            }
            itemCount ++;
        }
        await db.SaveChangesAsync();

        if (edititems.Length > 0)
        {
            IHttpActionResult result = PutItem(item, edititems).Result;
        }

        iStatus = StatusCode(HttpStatusCode.OK);
        return iStatus;
    }

1 个答案:

答案 0 :(得分:0)

你的代码看起来很好,我看到的唯一区别是在Put的ResponseType属性中,你有:[ResponseType(typeof(void))]

更改为:[ResponseType(typeof(item))]