【问题标题】:How to return correct status code when enumeration of IEnumerable fails. ASP.NET WebApiIEnumerable 枚举失败时如何返回正确的状态码。 ASP.NET 网络接口
【发布时间】:2015-10-05 16:04:30
【问题描述】:

注意:以下问题仅在控制器测试期间发生。这是精炼的问题How to properly integration test Web Api controller with IEnumerable results?

有什么方法可以避免调用 ToList 方法,但在延迟 LINQ 执行出现异常的情况下仍然返回正确的状态代码,以使控制器尽可能简单?

例如我有这样的 API 端点:

public class EntityController : ApiController
{
    ...
    public IHttpActionResult Get()
    {
        return Ok(Session.Query<Entity>());
    }
}

上面的代码总是会返回成功的状态码,但是使用 ToList 则不会成功,以防执行查询出现任何问题。

public class EntityController : ApiController
{
    ...
    public IHttpActionResult Get()
    {
        return Ok(Session.Query<Entity>().ToList());
    }
}

这样做的原因很清楚,但是有没有更聪明的方法来返回正确的状态代码并保持控制器简单?

【问题讨论】:

  • 如果查询有问题,第一个示例将返回500 - Internal Server Error,异常只会发生在管道中的不同点,很可能是在序列化程序枚举 IEnumerable 时。跨度>
  • 是的,@AnishPatel,您实际上是对的,我需要完善这个问题。当我尝试针对数据库集成测试此控制器时会出现问题,并且由于某种原因整个管道未执行并且状态代码在任何情况下为 200。
  • 请参阅answer 对您重新提出的问题。

标签: c# asp.net linq asp.net-web-api


【解决方案1】:

您可以调试操作,然后查看抛出了什么异常。

然后你可以很容易地try-catch这行代码,如果失败了,你给一些不同的东西然后500回来。

try
{
    return //...;
}
catch (//your Exception)
{
    return //... As Example BadRequest or something different
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多