调用 HttpRequest.GetBufferlessInputStream 后不支持此方法或属性

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

我正在尝试使用 Angular Js 和 WEB API 浏览文件并将其从客户端上传到服务器。我使用输入文件类型供用户选择文件并将文件发布到 WEB API。在 Web API 中,我收到以下错误“调用 HttpRequest.GetBufferlessInputStream 后不支持此方法或属性。”
我正在使用以下代码:-

     public IHttpActionResult UploadForm()
    {
        HttpResponseMessage response = new HttpResponseMessage();
        var httpRequest = System.Web.HttpContext.Current.Request;
        if (httpRequest.Files.Count > 0)
        {
            foreach (string file in httpRequest.Files)
            {
                var postedFile = httpRequest.Files[file];
                var filePath = System.Web.HttpContext.Current.Server.MapPath("~/UploadFile/" + postedFile.FileName);
                postedFile.SaveAs(filePath);
            }
        }
         return Json("Document Saved");
    }

当我尝试从 HTTP 请求获取文件时,出现此错误...我应该更新 Web 配置中的任何内容吗?

请帮我解决这个问题..

c# asp.net-web-api httprequest wcf-web-api
3个回答
0
投票

试试这个,它对我来说效果很好。

        //get the root folder where file will be store
        string root = HttpContext.Current.Server.MapPath("~/UploadFile");

        // Read the form data.
        var provider = new MultipartFormDataStreamProvider(root);
        await Request.Content.ReadAsMultipartAsync(provider);

        if (provider.FileData.Count > 0 && provider.FileData[0] != null)
        {
            MultipartFileData file = provider.FileData[0];

            //clean the file name
            var fileWithoutQuote = file.Headers.ContentDisposition.FileName.Substring(1, file.Headers.ContentDisposition.FileName.Length - 2);

            //get current file directory on the server
            var directory = Path.GetDirectoryName(file.LocalFileName);

            if (directory != null)
            {
                //generate new random file name (not mandatory)
                var randomFileName = Path.Combine(directory, Path.GetRandomFileName());
                var fileExtension = Path.GetExtension(fileWithoutQuote);
                var newfilename = Path.ChangeExtension(randomFileName, fileExtension);

                //Move file to rename existing upload file name with new random filr name
                File.Move(file.LocalFileName, newfilename);

            }
        }

0
投票

我也遇到了同样的问题。 @Jean 的解决方案对我不起作用。

我需要上传一些 CSV 文件并且必须在控制器中使用它。

在Javascript中,我使用Fetch API上传csv文件。

但是,在控制器中,我使用了以下代码:

[HttpPost]
        [CatchException]
        public bool ImportBundlesFromCsv()
        {
            var a = Request.Content.ReadAsByteArrayAsync();

            //convert to Stream if needed
            Stream stream = new MemoryStream(a.Result); // a.Result is byte[]

            // convert to String if needed
            string result = System.Text.Encoding.UTF8.GetString(a.Result);

            // your code

            return true;
        }

这对我有用。希望这有帮助!


0
投票

exchange powershell 上的示例解决方案:

Set-MailboxRegionalConfiguration -identity MailboxName -Timezone "E. Africa Standard Time" -Language en-US

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