HttpPostedFileBase ContentLength = 0阅读后

问题描述 投票:0回答:1

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

我做错了什么?预先感谢。

c# filestream streamreader memorystream httpfilecollection
1个回答
0
投票

我在做什么错?

此:

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

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

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

不想想要两次读取文件。

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

© www.soinside.com 2019 - 2024. All rights reserved.