asp.net 415 Неподдерживаемый тип носителя с formData POST - PullRequest
0 голосов
/ 26 июня 2018

Проблема:

Контроллер API не может получить доступ к данным HTTP-запроса, которые включены в объект HTTPD-запроса FormData

Мне нужно передать данные объекта файла, добавленные в объект FormData в HTTP-запрос Post, в asp.net api controller и front-end is angularjs.i не может получить данные http-запроса из api controller.my код ниже.пожалуйста, посмотрите на это, было бы здорово :)

когда я передаю,

Тип контента: не определено

ошибка говорит 415 Неподдерживаемый тип носителя

, если Content-type: multipart/form-data, то не может получить доступ к данным из контроллера API.

Внешний интерфейс

$scope.submit = function (files) {   
        var formData = new FormData();   

        var getFormData = function(appendFiles){
            if (appendFiles.length) {
                angular.forEach(appendFiles,function(file){
                    if(!file.uploaded){
                        formData.append("imgFiles",file);
                        file.uploaded = true;
                    }
                });            
            } else {
                formData.append('imgFiles', files);
            }
            console.log(formData.values());
            return formData;
        }

        $http({
            url : "URL",
            method: "POST",
            data: getFormData(files),
            headers: {
                'Content-Type': undefined

            },
            transformRequest: angular.identity,
        })
        .then(
            function (resp) {
                // alert(JSON.stringify(resp));
                console.log(resp)                
            },
            function (resp) {
                console.log(resp)
            }
        );
    };

Метод контроллера Api

        [HttpPost]
        [Route("route")]
        public string UploadFiles(List<HttpPostedFileBase> files)
        {
            var filesToDelete = HttpContext.Current.Request.Files;

            //i need to access file here.using param or otherway    

            return stat;
        }

1 Ответ

0 голосов
/ 05 июля 2018

Я решил проблему. Я изменил метод контроллера API, как показано ниже,

        [HttpPost]
        [Route("route")]
        public async Task<string> UploadFiles()
        {
            FileUploadService fileService = new FileUploadService();
            if (!Request.Content.IsMimeMultipartContent())
            {
                this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
            }
            var uploadFolder = "upload folder physical path"

            //this method is in below
            var provider = GetMultipartProvider(uploadFolder);

            await Request.Content.ReadAsMultipartAsync(provider);

            foreach (MultipartFileData fileData in provider.FileData)
            {

                var physicalPath = fileData.LocalFileName;
                var fileName = fileData.Headers.ContentDisposition.FileName;

            }

            return "return value";
        }

        private MultipartFormDataStreamProvider GetMultipartProvider(string uploadFolder)
        {
            try
            {
                var root = HttpContext.Current.Server.MapPath(uploadFolder);

                if (!Directory.Exists(root))
                {
                    Directory.CreateDirectory(root);
                }
                return new MultipartFormDataStreamProvider(root);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
...