程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了IFormFile在Asp.Net Core WebAPI中始终为空大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决IFormFile在Asp.Net Core WebAPI中始终为空?

开发过程中遇到IFormFile在Asp.Net Core WebAPI中始终为空的问题如何解决?下面主要结合日常开发的经验,给出你关于IFormFile在Asp.Net Core WebAPI中始终为空的解决方法建议,希望对你解决IFormFile在Asp.Net Core WebAPI中始终为空有所启发或帮助;

这是使用angularJs的方法:

vm.addfile = function () {                      
                var fileUpload = $("#file").get(0);
                var files = fileUpload.files;
                var data = new FormData();
                for (var i = 0; i < files.length ; i++) {
                    data.append(files[i].name, files[i]);
                }


                $http.post("/API/files/", data, {
                    headers: { 'Content-Type': undefined },
                    transformrequest: angular.IDentity
                }).success(function (data, status, headers, config) {

                }).error(function (data, status, headers, config) {

                });
}

在网络API中:

[httpPost]
public async Task<IActionResult> postfile()
{
 //Read all files from angularJs FormData post request
 var files = request.Form.files;
 var strigValue = request.Form.Keys;
 .....
}

或像这样:

    [httpPost]
    public async Task<IActionResult>  postfiles(IFormCollection collection)
    {
        var f = collection.files;

            foreach (var file in f)
            {
                //....
             }           
    }

解决方法

我在尝试使用angularjs控制器推送数据时遇到问题。但是我所做的(IFormFile文件)总是空的。只有一些使用razor语法的示例,但是没有使用angular或jquery的示例。

HTML:

<form class="form-body" enctype="multipart/form-data" name="newFileForm" ng-submit="vm.addFile()"><input type="file" id="file1" name="file" multiple ng-files="getTheFiles($files)"/></form>

指示:

(function() {
'use Strict';

angular
    .module('app')
    .directive('ngFiles',['$parse',function ($parsE) {

    function fn_link(scope,element,attrs) {
        var onChange = $parse(attrs.ngFiles);
        element.on('change',function (event) {
            onChange(scope,{ $files: event.target.files });
        });
    };

    return {
        link: fn_link
    };
    }]);
})();

控制者

var formdata = new FormData();
    $scope.getTheFiles = function ($files) {
        angular.forEach($files,function (key,value) {
            formdata.append(key,value);
        });
    };

vm.addFile = function () {                                              
        var xhr = new XMLhttprequest();
        xhr.open('POST',url,truE);
        xhr.setrequestHeader("Content-Type","undefined");
        xhr.send(formdata);          
    }

ASP.NET核心WebAPI:

[httpPost]
    public async Task<IActionResult> PostProductProjectFile(IFormFile filE)
    {
        if (!ModelState.IsValid)
        {
            return Badrequest(ModelStatE);
        }

        ....
        return ...;
    }

我还尝试过使用formdata,因为它是您使用razor语法发布时构造的。像这样:

dataservice.addFile(formdata,{
            contentDisposition: "form-data; name=\"files\"; filename=\"C:\\Users\\UserName\\Desktop\\snip_20160420091420.png\"",contentType: "multipart/form-data",headers: {
                        "Content-Disposition": "form-data; name=\"files\"; filename=\"C:\\Users\\UserName\\Desktop\\snip_20160420091420.png\"",'Content-Type': "image/png"
                    },filename: "C:\\Users\\UserName\\Desktop\\snip_20160420091420.png",name: "files",length : 3563
            }

也代替formData提供原始文件,如我在评论中所写。但是仍然没有任何反应

大佬总结

以上是大佬教程为你收集整理的IFormFile在Asp.Net Core WebAPI中始终为空全部内容,希望文章能够帮你解决IFormFile在Asp.Net Core WebAPI中始终为空所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。