首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用.net 4API端点从Request.Content对象获取原始请求正文

如何使用.net 4API端点从Request.Content对象获取原始请求正文
EN

Stack Overflow用户
提问于 2016-02-24 06:29:28
回答 5查看 138.9K关注 0票数 42

我正在尝试捕获原始的请求数据,并希望将请求正文内容从request对象中提取出来。

我看到有人建议做一个Request.InputStream,但是这个方法在Request对象上不可用。

你知道如何获得Request.Content主体的字符串表示吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-02-24 07:17:39

您可以通过在Request.Content属性上调用ReadAsStringAsAsync来获取原始数据。

string result = await Request.Content.ReadAsStringAsync();

如果你想把它放在一个字节或者一个流中,有各种各样的重载。因为这些是异步方法,所以你需要确保你的控制器是异步的:

public async Task<IHttpActionResult> GetSomething()
{
    var rawMessage = await Request.Content.ReadAsStringAsync();
    // ...
    return Ok();
}

EDIT:如果你从这个方法接收到一个空字符串,那就意味着有别的东西已经读取了它。当它这样做时,它将指针留在末尾。执行此操作的另一种方法如下:

public IHttpActionResult GetSomething()
{
    var reader = new StreamReader(Request.Body);
    reader.BaseStream.Seek(0, SeekOrigin.Begin); 
    var rawMessage = reader.ReadToEnd();

    return Ok();
}

在这种情况下,您的端点不需要是异步的(除非您有其他异步方法)

票数 38
EN

Stack Overflow用户

发布于 2016-11-10 18:01:00

在您对@Kenneth回答的评论中,您说ReadAsStringAsync()返回的是空字符串。

这是因为您(或者类似模型绑定器的东西)已经阅读了内容,所以Request.Content中内部流的位置在末尾。

你能做的是:

public static string GetRequestBody()
{
    var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
    bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
    var bodyText = bodyStream.ReadToEnd();
    return bodyText;
}
票数 79
EN

Stack Overflow用户

发布于 2018-12-18 05:09:58

对于其他未来的用户,他们不想让他们的控制器异步,或者不能访问HttpContext,或者正在使用dotnet核心(这是我在谷歌上找到的第一个尝试这样做的答案),下面的方法对我有效:

[HttpPut("{pathId}/{subPathId}"),
public IActionResult Put(int pathId, int subPathId, [FromBody] myViewModel viewModel)
{

    var body = new StreamReader(Request.Body);
    //The modelbinder has already read the stream and need to reset the stream index
    body.BaseStream.Seek(0, SeekOrigin.Begin); 
    var requestBody = body.ReadToEnd();
    //etc, we use this for an audit trail
}
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35589539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档