C# 异步Web Api操作过早返回

C# 异步Web Api操作过早返回,c#,mongodb,asp.net-web-api,async-await,restsharp,C#,Mongodb,Asp.net Web Api,Async Await,Restsharp,我正在编写一个nuget包,它将使用我编写的RESTAPI。我在使用RestSharp异步调用它时遇到了一些困难 我有以下控制器方法: [HttpGet("{id}")] public async Task<IActionResult> GetFeatureByIdAsync(string id) { if (string.IsNullOrWhiteSpace(id)) { ModelState.AddM

我正在编写一个nuget包,它将使用我编写的RESTAPI。我在使用RestSharp异步调用它时遇到了一些困难

我有以下控制器方法:

    [HttpGet("{id}")]
    public async Task<IActionResult> GetFeatureByIdAsync(string id)
    {
        if (string.IsNullOrWhiteSpace(id))
        {
            ModelState.AddModelError("id-Null", "The id parameter cannot be null.");
            return BadRequest(ModelState);
        }

        var feature = await _director.GetFeatureById(id);

        if (feature == null)
            return NotFound();

        var model = new ViewModel<Feature>(feature);
        return Ok(model);
    }
我想了解一下如何正确调用API的最佳方法?因为我的沙盒代码失败,出现内部服务器500错误。这是因为api方法正在等待嵌套异步调用完成。因此,在嵌套api调用有机会完成之前,初始请求返回到沙箱代码

沙盒测试代码需要等待API返回结果。目前它没有这样做

那么,这里的正确方法是什么


更新:我的问题是因为Mongo库方法的使用不正确。

我的问题来自Mongo库方法的.chained方法调用:

我试图做到以下几点:

Collection.Find(x => x.Name.ToLower().Equals(name.ToLower())
代码已编译,但它引发了一个异常,VS studio 17没有中断,因此我不知道问题发生在哪里。打开代码镜头后,我注意到失败的请求以红色突出显示。这打开了一个App Insights窗口,其中突出显示了已抛出的4个
InvalidOperationException()
。这就是我发现内部服务器错误500的原因


无论如何,这就是我解决异步Web API问题的方法-这是我第一次在Web服务上使用它,所以我不知道预期的默认行为应该是什么。

这是因为API方法正在等待嵌套的异步调用完成。
-不,直到
异步
方法完成,才会发送响应。500错误是由其他原因引起的。
500
通常意味着正在抛出异常而未处理。你调试过Web API中的异常吗(假设存在异常)?谢谢各位-让我进一步深入了解一下。我已经嵌套了.ToLower()方法引发了一个无效的操作异常,奇怪的是,当我调试时,错误没有出现,因此我无法找出导致问题的原因?@ibramumtaz那么这是否意味着您已经解决了自己的问题,并且无法再重现该问题?
[TestFixture]
public class Sandbox
{
    private FeatureSwitch _sut;

    [OneTimeSetUp]
    public void Setup()
    {
        const string machineName = "localhost";
        const int port = 5000;
        _sut = new FeatureSwitch(machineName, port);
    }

    [Test]
    public async Task ShouldReturnTrue()
    {
        var result = await _sut.IsSwitchEnabledAsync("Release_US501_AddUser");
        result.Should().BeTrue();
    }
}
Collection.Find(x => x.Name.ToLower().Equals(name.ToLower())