1

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;
}
4

1 に答える 1