0

我将 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

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

4

1 回答 1

2

我究竟做错了什么?

这:

我 [...] 想阅读该 [文件] 两次

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

当然,您可以回退输入流并似乎解决了眼前的问题,但这只会引入新问题,因为现在您将整个文件一次放在内存中 - 并且您的代码只有在读取整个请求后才能继续。

不想两次读取文件。

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

于 2020-01-29T12:41:27.200 回答