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

时间:2017-10-12 14:13:01

标签: c# asp.net-web-api httprequest wcf-web-api

我正在尝试使用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配置中的任何内容吗?

请帮我解决这个问题..

2 个答案:

答案 0 :(得分: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);

            }
        }

答案 1 :(得分: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;
        }

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