【问题标题】:asp.net 415 Unsupported Media Type with formData POSTasp.net 415 不支持的媒体类型与 formData POST
【发布时间】:2018-06-26 04:45:36
【问题描述】:

问题:

API 控制器无法访问 HTTP 请求中包含 FormData 对象的 HTTP 请求数据

我需要将 http Post 请求中 FormData 对象中附加的文件对象数据传递给 asp.net api 控制器,前端是 angularjs。我无法从 api 控制器检索 http 请求数据。我的代码如下。请看看这个,它会很棒:)

当我通过时,

内容类型:未定义

错误提示 415 Unsupported Media Type

如果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;
        }

【问题讨论】:

  • 如果您自己解决了问题,请使用答案框回答您的问题。这将使人们更容易找到。

标签: angularjs form-data asp.net-apicontroller httppostedfilebase


【解决方案1】:

我已经解决了问题。我已经改变了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;
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多