C# 如何在IEnumerable枚举失败时返回正确的状态代码。ASP.NET WebApi

C# 如何在IEnumerable枚举失败时返回正确的状态代码。ASP.NET WebApi,c#,asp.net,linq,asp.net-web-api,C#,Asp.net,Linq,Asp.net Web Api,注意:以下问题仅在控制器测试期间发生。这是一个精炼的问题 有没有办法避免调用ToList方法,但在延迟LINQ执行出现异常时仍然返回正确的状态代码,以使控制器尽可能简单 例如,我有这样的API端点: public class EntityController : ApiController { ... public IHttpActionResult Get() { return Ok(Session.Query<Entity>());

注意:以下问题仅在控制器测试期间发生。这是一个精炼的问题

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

例如,我有这样的API端点:

public class EntityController : ApiController
{
    ...
    public IHttpActionResult Get()
    {
        return Ok(Session.Query<Entity>());
    }
}
公共类EntityController:ApicController
{
...
public IHttpActionResult Get()
{
返回Ok(Session.Query());
}
}
上面的代码将始终返回成功的状态代码,但对于ToList,如果执行查询时出现任何问题,它将不会成功

public class EntityController : ApiController
{
    ...
    public IHttpActionResult Get()
    {
        return Ok(Session.Query<Entity>().ToList());
    }
}
公共类EntityController:ApicController
{
...
public IHttpActionResult Get()
{
返回Ok(Session.Query().ToList());
}
}

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

您可以调试该操作,然后查看引发了什么异常

然后,您可以轻松地捕获这行代码,如果失败,您将返回不同的代码,然后返回500

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

希望有帮助。

您可以调试该操作,然后查看引发了什么异常

然后,您可以轻松地捕获这行代码,如果失败,您将返回不同的代码,然后返回500

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

希望有帮助。

第一个示例将返回一个
500-内部服务器错误
如果查询有问题,异常只会在管道中的不同点发生,最有可能是序列化程序枚举IEnumerable时。是的,@AnishPatel,你说得对,我需要改进这个问题。当我试图针对数据库对该控制器进行集成测试时,由于某种原因,整个管道没有执行,状态代码在任何情况下都是200。请检查细化的问题,请查看重新构建的问题。第一个示例将返回
500-内部服务器错误
,如果查询时,异常只会在管道中的不同点发生,最有可能是序列化程序枚举IEnumerable时。是的,@AnishPatel,你说得对,我需要改进这个问题。当我试图针对数据库对该控制器进行集成测试时,由于某种原因,整个管道没有执行,状态代码在任何情况下都是200。请检查细化的问题,请注意重新构建的问题。