ASP.NET WEB API でのステータスコードについて
あけましておめでとうございました。今年もよろしくお願いいたします。
ASP.NET WEB API の働きによるもの
void
アクションメソッドの戻り値が void の時は、204 No Content を返すようになっています。
PUT でも GET でも同じです。
public void PutProduct(int id, Product product) { //.... }
一般的なGET
アクションメソッドの戻り値が、何かの値であれば、
ステータスコードの指定がなくとも、200 OK を返します。
public IEnumerable<Product> GetAllProducts() { return repository.GetAll(); }
エラーのとき
アクションメソッド内でエラーが起きたときは、
例外フィルター等を指定しなくても、500 Internal Server Error を返します。
public void GetError(int name) { throw new ApplicationException(); }
HTTP の仕様により理想的とされるもの
新規追加した時
POST でデータを新規追加した時は、HTTP の仕様により、
201 Created を返すのがよいとされています。
下のコードでは、201 を返し、ヘッダーの Location に
新規追加したリソースを取得する URI を設定しています。
public HttpResponseMessage PostProduct([FromUri]Product item) { item = repository.Add(item); var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item); string uri = Url.Link("DefaultApi", new { id = item.Id }); response.Headers.Location = new Uri(uri); return response; }
リソースが見つからない時
データが存在しない場合は、お馴染みの 404 Not Found を返します。
public void DeleteProduct(int id) { Product item = repository.Get(id); if (item == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } repository.Remove(id); }