7

VS2012を使用してASP.NETMVCWebAPIプロジェクトのHelloWorldを作成しました。

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }
}

そのコントローラーにgetリクエストを発行すると、ステータス200のデータのXMLが返されます。これまでのところすべて問題ありません。

そのメソッドを削除すると、次のようになります。

public class ValuesController : ApiController
{
    // GET api/values
    //public IEnumerable<string> Get()
    //{
    //    return new string[] { "value1", "value2" };
    //}

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }
}

その後、404が見つかりません。IDを提供する必要があるため、私が欲しいのは400の悪いリクエストです。どうすればこれを達成できますか?

4

2 に答える 2

10

Get()エラーをスローするためだけにメソッドを保持する必要はありません。GetbyIDメソッドの署名を次のように変更します。

public string Get(int? id = null)
{
    if (id == null) throw new HttpResponseException(HttpStatusCode.BadRequest);
    return "value";
}
于 2013-01-07T04:27:51.017 に答える
4

1つの方法は、メソッドを含めることですが、代わりに例外をスローします。

public class ValuesController : ApiController
{
    // GET api/values
    public void Get()
    {
        throw new HttpResponseException(HttpStatusCode.BadRequest);
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }
}
于 2013-01-07T01:47:08.120 に答える