何时以及如何正确使用 [ResponseType(typeof(...))]?

When and how to use [ResponseType(typeof(...))] correctly?

我正在做一个项目,我有一个带有 Get(int id)GetElements()UpdateElement(int id, Element element)AddElement(Element element)DeleteElement(int id) 的基本控制器。 每个方法都使用 [Route][Get]... 注释和 returns 和 IHttpActionResult.

我对 [ResponseType(typeof(...))] 感到困惑。它是做什么用的?何时以及如何正确使用它?

我应该这样写吗? [ResponseType(typeof(IEnumerable<Element>))] 对于 GetElements()?

谢谢!

[ResponseType()] 属性有助于创建 RESTful Web API 以及通过 Swagger / Swashbuckle 自动生成文档。

例如,return基于 id 的项目的方法可以这样写

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

但是,如果找不到该项目,它将 return 为 null,而不是 404。

所以最好写成

[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/