WebAPI プロジェクトの Repository クラスのこのコード:
public DepartmentRepository()
{
Add(new Department { Id = 0, AccountId = "7.0", DeptName = "Dept7" });
Add(new Department { Id = 1, AccountId = "8.0", DeptName = "Dept8" });
Add(new Department { Id = 2, AccountId = "9.0", DeptName = "Dept9" });
}
... Controller クラスの次のコードによって呼び出されます。
public Department GetDepartment(int id)
{
Department dept = repository.Get(id);
if (dept == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return dept;
}
...ブラウザでこれを使用:
http://localhost:48614/api/departments/1/
...これを返します:
<Department xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/DuckbillServerWebAPI.Models">
<AccountId>7.0</AccountId>
<DeptName>Dept7</DeptName>
<Id>1</Id>
</Department>
...これは、Id == 1 ではなく、Id == 0 の Department のインスタンスに対応します。
REST URI で「0」を渡すと失敗します。"2" を渡すと AccountId = "8.0" が返され、"3" を渡すと AccountId = "9.0" が返されます。
「1」が「First」に変換された場合、Ids 値を指定しても何の意味がありますか? 42、76 などを割り当てることができます。
アップデート
エイドリアン・バンクスへの回答:
「GetDepartment 呼び出しで id の値を確認しましたか?」
入っているものです。"http://localhost:48614/api/departments/1/"
1 の場合、2"http://localhost:48614/api/departments/2/"
の場合、"http://localhost:48614/api/departments/0/"
0 の場合、NotFound 例外がスローされます。
「また、リポジトリの Get() メソッドのコードはどのようになっていますか?」
リポジトリの取得は次のとおりです。
public Department Get(int id)
{
return departments.Find(p => p.Id == id);
}
更新 2
Mike Wasson への回答として、Add メソッドを次に示します。
public Department Add(Department item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
item.Id = _nextId++;
departments.Add(item);
return item;
}
アイテムを追加/投稿するための私のコード (これもコード Mike Wasson の記事に基づく) は次のとおりです。
public HttpResponseMessage PostDepartment(Department dept)
{
dept = repository.Add(dept);
var response = Request.CreateResponse<Department>(HttpStatusCode.Created, dept);
string uri = Url.Link("DefaultApi", new { id = dept.Id });
response.Headers.Location = new Uri(uri);
return response;
}