25

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

当试图弄清楚为什么一个特定的值没有正确绑定时,这是非常烦人的。有没有一种快速的方法可以在不设置跟踪/日志记录的情况下做到这一点?

4

6 回答 6

36

最容易安装Fiddler。然后,您将看到通过网络发送的所有内容,并不仅检查请求有效负载,还检查 HTTP 标头。如果您从 javascript 中使用 API,FireBug、Chrome 开发者工具栏和 IE 开发者工具之类的东西会向您显示网站发出的所有网络请求。

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

new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd()
于 2013-05-20T15:08:37.707 回答
4

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

发布本地主机:53356/api/carparksapi/GetRecod

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

       //  API -Controller Method :: 

        var httpContext = (HttpContextWrapper)Request.Properties["MS_HttpContext"];
        var foo = httpContext.Request.Form["jsonRequest"];
        return foo; //This is value passed in request
于 2016-04-01T08:22:07.627 回答
3

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

new System.IO.StreamReader(Request.Body).ReadToEnd()
于 2018-09-25T16:06:46.137 回答
2

对我来说@DarinDimitrov 给出了答案

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

添加命名空间做到了

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

希望这可以节省您一些时间

于 2017-02-24T04:05:49.933 回答
2

对我来说@Matas Vaitkevicius 的回答给了

错误 CS1061:“HttpContextBase”不包含“Current”的定义,并且找不到接受“HttpContextBase”类型的第一个参数的扩展方法“Current”(您是否缺少 using 指令或程序集引用?)

用 System.Web.HttpContext.Current 替换 HttpContext.Current 为我做了

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

希望这可以节省您一些时间

于 2017-05-23T13:40:42.800 回答
1

如果蒸汽的位置在位置 0,这些答案中的任何一个都可以工作。

HttpContext.Current.Request.InputStream.Position =  0;
var body = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();
        
于 2018-04-14T20:07:25.213 回答