web-dev-qa-db-ja.com

[ResponseType(typeof(...))]をいつどのように正しく使用しますか?

私はプロジェクトに取り組んでおり、Get(int id)GetElements()UpdateElement(int id, Element element)AddElement(Element element)DeleteElement(int id)の基本的なコントローラーを持っています。すべてのメソッドは、[Route][Get]...アノテーションを使用し、リターンとIHttpActionResultを返します。

[ResponseType(typeof(...))]について混乱しています。それは何のため?いつ、どのように正しく使用しますか?

私はこのようなものを書くべきですか? [ResponseType(typeof(IEnumerable<Element>))] for GetElements()

ありがとう!

9
Chris

[ResponseType()]属性は、RESTful Web APIを作成する場合や、Swagger/Swashbuckleを介してドキュメントを自動生成する場合に役立ちます。

たとえば、IDに基づいてアイテムを返すアプローチは、次のように記述できます。

public YourClass Get(int id)
{
    var item = repo.GetById(id);
    return item;
}

ただし、そのアイテムが見つからない場合は、404ではなくnullが返されます。

したがって、次のように書く方がよいでしょう。

[ResponseType(typeof(YourClass))]
public IHttpActionResult Get(int id)
{
    var item = repo.GetById(id);
    if (item != null)
    {
        return this.Ok(item);
    }

    return this.NotFound();
}

ここでこれのその他の使用法を参照してください http://www.asp.net/web-api/overview/web-api-routing-and-actions/create-a-rest-api-with-attribute-routing

Swashbuckleのカスタマイズと、ResponseType属性を使用してドキュメントを決定する方法も参照してください https://Azure.Microsoft.com/en-gb/documentation/articles/app-service-api-dotnet-swashbuckle-customize/

10
JConstantine