C# 异步Web Api操作过早返回
我正在编写一个nuget包,它将使用我编写的RESTAPI。我在使用RestSharp异步调用它时遇到了一些困难 我有以下控制器方法: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
[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())