在流中使用 SeekOrigin.Begin 时不支持指定的方法

Specified method is not supported while using SeekOrigin.Begin on stream

我有一个 StreamReader,稍后我用它来反序列化我的请求,如下所示 -

这里sStream对象-

using (var reader = new StreamReader(s))
{
    using (var jsonReader = new JsonTextReader(reader))
    {
        var ser = new JsonSerializer();
        return ser.Deserialize<T>(jsonReader);
    }
}

一切正常,但现在我试图在控制台上打印实际的请求正文,所以我尝试这样做,但它给了我一个错误 -

using (var reader = new StreamReader(s))
{
    string body = reader.ReadToEnd();
    // print body on the console which is what I am trying to do
    // reset to start of stream
    // this line gives me error
    s.Seek(0, SeekOrigin.Begin);
    using (var jsonReader = new JsonTextReader(reader))
    {
        var ser = new JsonSerializer();
        return ser.Deserialize<T>(jsonReader);
    }
}

此更改后,我收到一个错误 - Specified method is not supported. 我不确定我在这里做错了什么。

注意:这只是为了调试目的,我想在控制台上打印正文。之后我会删除 reader.ReadToEnd(); 东西。

并非所有流都支持搜索。流有 CanSeek 属性,在这种情况下可能是 false

在这种特定情况下,由于您无论如何都要将整个消息读入一个字符串,因此您可以从该字符串创建一个 StringReader 并将其传递到 JsonTextReader 而不是 StreamReader。

在其他情况下,您可能需要寻找不同的解决方案。例如,如果您正在阅读 ASP.NET 核心请求流,您可以 enable buffering to allow the stream to be read multiple times.