c#-Web API请求在ApiController的ExecuteAsync方法中为空
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-Web API请求在ApiController的ExecuteAsync方法中为空,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1543字,纯文字阅读大概需要3分钟。
内容图文
![c#-Web API请求在ApiController的ExecuteAsync方法中为空](/upload/InfoBanner/zyjiaocheng/667/7d956a323b8c4609bcf4cbc4d2f2cbce.jpg)
我正在尝试访问ApiController派生类中的Request属性.
由于某些原因,ExecuteAsync方法中的Request为null.我看过其他问题,因此在您提出以下要求之前:
>我不是通过调用构造函数来初始化控制器,而是从外部设备进行的常规HTTP POST API调用.
>我在Fiddler本地尝试了相同的请求,其行为是相同的.
>我不是单元测试.
>在点击ExecuteAsync方法之前,我的请求通过一个委托处理程序,并且在委托处理程序中,我的请求对象存在(我什至添加了一些属性也没有任何问题).
>在委托处理程序的最后一行,我调用return await base.SendAsync(request,cancelToken);没有问题,并且存在请求.
>紧接着API控制器中的HttpContext.Current.Request不为null,并且可以毫无问题地进行访问.
>在API控制器中,RequestContext不为null,并且可以毫无问题地进行访问.
>在同一行中,“请求”为空.
为什么会发生这种情况?我正在使用Web API 2.2(和MVC 5,如果相关).
解决方法:
这可能是由于您在尝试使用async / await时尝试访问HttpContext.
因此,您有两个选择:
>通过ExecuteAsync方法’HttpControllerContext’参数-controllerContext.Request访问请求.
>确保您的web.config以.NET 4.5为目标,并使用aspnet:UseTaskFriendlySynchronizationContext设置为true更新appSettings.
您可以在这里了解更多-Using HttpContext Safely After Async in ASP.NET MVC Applications.
为了更好地了解幕后情况,我建议:
>了解什么是SynchronizationContext-ExecutionContext vs SynchronizationContext
>了解它与ASP.NET-Understanding the SynchronizationContext in ASP.NET的关系.
在非常高的级别上:在同步服务器实现中,整个请求由同一线程处理,执行上下文使用TLS(线程本地存储)存储,这意味着HttpContext在代码中的任何位置都可用.
在异步服务器实现(异步/等待)中,请求可以由多个线程处理,并且需要在这些线程之间传递执行上下文.
内容总结
以上是互联网集市为您收集整理的c#-Web API请求在ApiController的ExecuteAsync方法中为空全部内容,希望文章能够帮你解决c#-Web API请求在ApiController的ExecuteAsync方法中为空所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。