Visual studio 如何从Visual Studio查看ASP.NET Web API中的请求正文?

Visual studio 如何从Visual Studio查看ASP.NET Web API中的请求正文?,visual-studio,asp.net-web-api,Visual Studio,Asp.net Web Api,如何从Visual Studio查看ASP.NET Web API中的请求正文?在ASP.NET MVC中,您可以使用QuickWatch检查请求对象,并查看正文内容和任何已发布的表单数据。据我所知,ASP.NET Web API不允许您多次阅读正文 当试图找出特定值未正确绑定的原因时,这是一个非常烦人的问题。有没有一种不设置跟踪/日志记录的快速方法?这是最容易安装的方法。然后,您将看到通过线路发送的所有内容,并不仅检查请求负载,还检查HTTP头。如果您正在使用javascript的API,Fi

如何从Visual Studio查看ASP.NET Web API中的请求正文?在ASP.NET MVC中,您可以使用QuickWatch检查
请求
对象,并查看正文内容和任何已发布的表单数据。据我所知,ASP.NET Web API不允许您多次阅读正文

当试图找出特定值未正确绑定的原因时,这是一个非常烦人的问题。有没有一种不设置跟踪/日志记录的快速方法?这是最容易安装的方法。然后,您将看到通过线路发送的所有内容,并不仅检查请求负载,还检查HTTP头。如果您正在使用javascript的API,FireBug、Chrome开发者工具栏和IE开发者工具等工具将向您显示网站发出的所有网络请求

如果您必须检查服务器上的流量,那么如果您将Web API托管在ASP.NET应用程序中,您可以在即时窗口中放置以下行:

new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd()
new System.IO.StreamReader(Request.Body).ReadToEnd()

如果需要正文>>表单数据

Post localhost:53356/api/carparksapi/GetRecod

key=jsonRequest和value=[{“abcd”:“zxxx”}]


对于我,@DarinDimitrov给出了答案

错误CS0246:找不到类型或命名空间名称“StreamReader”(是否缺少using指令或程序集引用?)

添加命名空间成功了

new System.IO.StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd()


希望这能为我节省一些时间@Matas Vaitkevicius回答

错误CS1061:“HttpContextBase”不包含的定义 “Current”和不接受第一个参数的扩展方法“Current” 找不到类型为“HttpContextBase”的(是否缺少使用 指令或组件引用?)

用System.Web.HttpContext.Current替换HttpContext.Current为我做到了这一点

new System.IO.StreamReader(System.Web.HttpContext.Current.Request.InputStream).ReadToEnd()

希望这能为您节省一些时间

如果蒸汽位置为0,这些值中的任何一个都可以工作

HttpContext.Current.Request.InputStream.Position =  0;
var body = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();

对于ASP.NET Core,请在即时窗口中使用此选项:

new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd()
new System.IO.StreamReader(Request.Body).ReadToEnd()

Firebug不会帮你完成你想要的?它正在监视来自浏览器的实际HTTP流量,而VS实际上无法做到这一点。API请求来自我无法访问的外部源。或者您也可以执行
request.Content.ReadAsStringAsync().Result
。这将缓冲请求内容,管道的其余部分仍将按预期工作,但如果使用StreamReader将流读取到底,则需要确保重置位置,以便管道的其余部分工作。但是,正如您所提到的,Fiddler将是我的首选。ASP.NET核心:
新系统.IO.StreamReader(Request.Body).ReadToEnd()
要重置读取位置,
Request.Body.position=0
请记住在读取后设置
Request.Body.position=0
,以便您的代码可以再次读取!