C# ApicController的ExecuteAsync方法中的Web API请求为空
我正在尝试访问我的C# ApicController的ExecuteAsync方法中的Web API请求为空,c#,asp.net,asp.net-web-api,asp.net-web-api2,C#,Asp.net,Asp.net Web Api,Asp.net Web Api2,我正在尝试访问我的ApiController派生类中的Request属性 由于某种原因,Request在ExecuteAsync方法中为null。我看到了其他问题,所以在你提问之前: 我不是通过调用构造函数来初始化控制器,它是来自外部设备的常规HTTP POST API调用 我在本地尝试了与Fiddler相同的请求,行为是相同的 我不是单元测试 在点击ExecuteAsync方法之前,我的请求通过一个委托处理程序,在委托处理程序中,我的请求对象存在(我甚至添加了一些属性,没有任何问题) 在委托
ApiController
派生类中的Request
属性
由于某种原因,Request
在ExecuteAsync
方法中为null。我看到了其他问题,所以在你提问之前:
- 我不是通过调用构造函数来初始化控制器,它是来自外部设备的常规HTTP POST API调用
- 我在本地尝试了与Fiddler相同的请求,行为是相同的
- 我不是单元测试
- 在点击
方法之前,我的请求通过一个委托处理程序,在委托处理程序中,我的请求对象存在(我甚至添加了一些属性,没有任何问题)ExecuteAsync
- 在委托处理程序的最后一行,我调用
return wait base.SendAsync(request,cancellationToken)代码>无问题且请求存在
- 就在API控制器中,
不是空的,可以毫无问题地访问HttpContext.Current.Request
- 在API控制器中,
不是空的,可以毫无问题地访问RequestContext
- 在同一行中,
为空Request
为什么会发生这种情况?我使用的是Web API 2.2(以及MVC 5,如果相关的话)。这可能是因为您在使用async/await时试图访问HttpContext 因此,您有两种选择:
在异步服务器实现(async/await)中,请求可能由多个线程处理,并且需要在这些线程之间传递执行上下文。如果可能,能否显示POST API调用?可能是外部设备未正确形成请求。你有没有试过用邮递员或任何REST客户机测试API?@SouvikGhosh根据你的评论,我刚刚试过用Fiddler。不幸的是,它仍然是一样的。RequestContext是请求的一部分(也可以通过Request.GetRequestContext()获得)。您可以检查如何在客户端创建请求吗?此外,您还可以检查HttpContext,它还可以为您提供有关单个请求的信息。@SouvikGhosh您所说的客户端是什么意思?我已经尝试了两个不同的客户端,它们是常规HTTP请求,没有什么特别之处。我敢肯定不是客户。在web.configOption中,选项2似乎更简单,但由于某种原因它不起作用(仍然为空)。备选办法1奏效了。不过我很乐意知道原因。