从Web api 2控制器返回IHttpActionResults时,我遇到了不一致的异步行为。
我有以下控制器:
[RoutePrefix("api")]
public class TestController : ApiController
{
[Route("foo")]
public async Task<IHttpActionResult> GetFoo()
{
string result = await Task.FromResult("foo");
return Ok();
}
[Route("bar")]
public async Task<IHttpActionResult> GetBar()
{
string result = await Task.FromResult("bar");
return Ok(result);
}
}
这个中间件插入管道
public class TestMiddleware : OwinMiddleware
{
public TestMiddleware(OwinMiddleware next)
:base(next)
{
}
public override async Task Invoke(IOwinContext context)
{
await Next.Invoke(context);
; // breakpoint here
}
}
请注意中间件中的断点。
如果我发出以下请求(在调试下):/ api / foo,则应用程序在断点处停止,并且请求仍然从客户端角度打开(在这种情况下为fiddler)。
但是,如果我向/ api / bar发出请求,则在到达断点之前,请求已返回并带有响应。
对于不返回值的其他操作结果也是如此。
这是预期的行为吗?我不喜欢这种不一致,最重要的是,我没有在文档中看到过这一点。