读取后 HttpPostedFileBase ContentLength = 0

HttpPostedFileBase ContentLength = 0 after reading

我将 json 文件发送到服务器并希望读取该文件两次。

[HttpPost]
public ActionResult CreateCases(string fileFormat, Guid key)
{
    var file = Request.Files[0];
    CheckFile(file);
    Create(file);

    return Json();
}

public object Check(HttpPostedFileBase file)
{
    var stream = file.InputStream;
    var serializer = new JsonSerializer();
    using (var sr = new StreamReader(stream))
    using (var jsonTextReader = new JsonTextReader(sr))
    {
        dynamic json = serializer.Deserialize(jsonTextReader);
        ...
    }
}

public object Create(HttpPostedFileBase file)
{
    var stream = file.InputStream;
    var serializer = new JsonSerializer();
    using (var sr = new StreamReader(stream))
    using (var jsonTextReader = new JsonTextReader(sr))
    {
        dynamic json = serializer.Deserialize(jsonTextReader);
        ...
    }
}

Check方法中file.ContentLength = 正确的值

Create方法中file.ContentLength = 0json变量已经= null

我做错了什么? 提前致谢。

What am I doing wrong?

这个:

I [...] want to read that [file] twice

您的客户端只将文件发送到您的网络应用程序一次,因此您应该只读取一次。

当然,您可以倒回输入流并似乎可以解决眼前的问题,但这只会引入新的问题,因为现在您立即将整个文件放在内存中 - 并且您的代码只能在整个请求完成后继续已阅读

不想读取文件两次。

如果要验证,则处理JSON,然后获取JSON,将其存储在变量中,然后验证并处理该变量。是的,这仍然需要您阅读整个请求正文,但这就是您的要求。