0

多数のオブジェクトが Web API コントローラーに送信され、データベースに挿入される場合、いくつかは成功し、いくつかは失敗する可能性がある場合、どのような応答を与えるのが最適ですか? 通常の HTTP 応答では十分ではないと思います。何が成功し、何が成功しなかったかを示す JSON 文字列を返す方法を見つけたほうがよいでしょうか? もしそうなら、どうすればいいですか?

私の投稿コントローラーを以下に示します。

助けてくれてありがとう、

マーク

    public HttpResponseMessage PostBooking(Booking[] bookings)
    {
        if (ModelState.IsValid)
        {
            foreach (var booking in bookings)
            {
                // check if there are any bookings already with this HID and RID...
                var checkbooking = db.Bookings.Where(h => h.HID == booking.HID && h.RID == booking.RID).ToList();
                // If so, return a response of conflict
                if (checkbooking.Count != 0 || checkbooking.Any())
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Conflict));
                }
                else
                {
                    // If not add the booking to the database and return a response of Created
                    db.Bookings.Add(booking);
                    db.SaveChanges();
                }
            } 
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
            return response;
        }
        else
        {
            // Model is not valid, so return BadRquest
            return Request.CreateResponse(HttpStatusCode.BadRequest);
        }
    }
4

1 に答える 1

1

挿入に失敗したオブジェクトのIDを含むJSONリストを返すことができます。

{
    "failedIds": [
        4,
        7,
        9
    ]
}

リクエストが正常に完了しなかったため、500HTTP応答ステータスコードも適切と思われます。

それをさらに一歩進めて、特定のIDごとに挿入が失敗した理由を説明することもできます。

{
    "failed": [
        {
            "id": 4,
            "reason": "database unavailable"
        },
        {
            "id": 7,
            "reason": "network cable unplugged"
        },
        {
            "id": 9,
            "reason": "a thief is currently running away with our server"
        }
    ]
}
于 2012-06-20T09:13:14.837 に答える