【问题标题】:API only returns responses with no contentAPI 只返回没有内容的响应
【发布时间】:2019-10-21 12:32:40
【问题描述】:

我的方法只返回没有内容的响应。

控制器

[HttpGet("Floors/{floorId}", Name = "FloorById")]
public IActionResult GetFloor(int floorId)
{
    try
    {
        Floor floor = _repository.Floor.GetFloor(floorId);
        if (floor == null)
            return NotFound();
        return Ok(floor);
    }
    catch (Exception e)
    {
        return StatusCode(500, "text");
    }
}

存储库

public Floor GetFloor(int floorId)
{
    return _context.Floors.FirstOrDefault(f => f.Id == floorId);
}

理想情况下,此代码也应返回带有对象的 Ok 响应。

相反,我只在使用 swagger 时得到 Ok 响应。甚至 NotFound 也没有。

【问题讨论】:

  • 控制器动作是怎么调用的?
  • @Fildor 解决了 Ok() 没有返回任何内容的问题,但我的 NotFound 仍然没有被 swagger ui 拾取。你能解释一下我什么时候应该使用 IActionResult 和 ActionResult 吗?
  • @Nkosi 我不明白这个问题。
  • 您从哪里得到 Ok 响应?您如何调用仅返回 Ok 响应的操作
  • @Nkosi 我刚刚开始使用 swagger ui 来测试我的 api。显然,我在这里做了很多坏事。 imgur.com/a/w4opMXR 这是一个例子。这是实际的 GetFloor 方法:imgur.com/a/rPqvBb4

标签: c# swagger asp.net-core-webapi


【解决方案1】:

Swagger 无法根据 IActionResult 确定操作返回的类型。

使用ProducesResponseType 属性:

[ProducesResponseType(typeof(Floor), 200)] // <-- THIS
[HttpGet("Floors/{floorId}", Name = "FloorById")]
public IActionResult GetFloor(int floorId) {
    try {
        Floor floor = _repository.Floor.GetFloor(floorId);
        if (floor == null)
            return NotFound();
        return Ok(floor);
    } catch (Exception e) {
        return StatusCode(500, "text");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2020-08-16
    • 2019-04-27
    • 2021-04-17
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    相关资源
    最近更新 更多