Параметр файла веб-API в форме всегда остается нулевым - PullRequest
1 голос
/ 17 июня 2020

Я начинаю работать с загрузкой файлов в C# Web Api, в настоящее время цель состоит в том, чтобы получить файл из Form-Param с именем metaData , именно так файл обрабатывается внутри контроллера.

[HttpPost, Route("{applicationId}/Files"), ResponseType(typeof(List<int>))]
        [MimeMultiart]
        public async Task<IHttpActionResult> CustomerApplicationFile(int applicationId)
        {
            try
            {
                // Get Data from form data.
                var stream = HttpContext.Current.Request.GetBufferedInputStream();
                new StreamReader(stream).ReadToEnd();
                var files = HttpContext.Current.Request.Files;
                var metaData = HttpContext.Current.Request.Form["metaData"];

                // Create MultipartFormDataContent 
                var requestContent = new MultipartFormDataContent
                {
                    {
                        new StringContent(metaData), "metaData"
                    }
                };

                for (int i = 0; i < files.Count; i++)
                {
                    var key = files.AllKeys[i];
                    requestContent.Add(new StreamContent(files[i].InputStream), key, files[i].FileName);
                }
                // Get session key
                var sessionKey = await Uow.Users.GetSessionKey(GetUserId());

                string uri = string.Format(Constants.CustomerApplicationFiles, applicationId);
                using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Add("sessionKey", sessionKey);
                    var response =
                        await client.PostAsync(AppSettings.ApiUrl + uri, requestContent);
                    return ResponseMessage(response);
                }
            }
            catch (BusinessEntityException ex)
            {
                Logger.Warn(ex);
                return this.BadRequest(ex);
            }
            catch (SqlException ex)
            {
                Logger.Fatal(ex);
                return this.InternalServerError(AppError.ServerSqlNotFound);
            }
            catch (Exception ex)
            {
                Logger.Fatal(ex);
                return this.InternalServerError(AppError.InternalErrorServer);
            }
        }

Однако я продолжаю получать следующее сообщение, в котором говорится, что параметр равен нулю ... но я отправляю, как показано на этом image.

"exceptionType": "System.ArgumentNullException", "message": "Значение не может быть нулевым. \ r \ nParameter name: content", "stackTrace": "at System. Net .Http.StringContent.GetContentByteArray (String content , Encoding encoding) \ r \ n в System. Net .Http.StringContent..ctor (содержимое строки, кодировка кодировки, String mediaType)

...