Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;内容类型不正确:图像/png“;尝试使用Ajax将png上载到Asp.net核心服务器时_C#_Asp.net_Ajax_Asp.net Core Mvc_Image Uploading - Fatal编程技术网

C# &引用;内容类型不正确:图像/png“;尝试使用Ajax将png上载到Asp.net核心服务器时

C# &引用;内容类型不正确:图像/png“;尝试使用Ajax将png上载到Asp.net核心服务器时,c#,asp.net,ajax,asp.net-core-mvc,image-uploading,C#,Asp.net,Ajax,Asp.net Core Mvc,Image Uploading,您好,我正在尝试使用以下代码使用Ajax将任意文件上载到我的Asp.net核心服务器: $.ajax({ url: '/Provider/Image/' + guid, type: "POST", contentType: false, // Not to set any content header processData: false, // Not to proces

您好,我正在尝试使用以下代码使用Ajax将任意文件上载到我的Asp.net核心服务器:

        $.ajax({
            url: '/Provider/Image/' + guid,  
            type: "POST",  
            contentType: false, // Not to set any content header  
            processData: false, // Not to process data  
            data: image,  
            success: function (result) {  
                alert(result);  
            },  
            error: function (err) {  
                alert(err.statusText);  
            }  
        });
其中图像来自一个表单,表单中的输入类型为“file”

我的C#是:

[ActionName(“图像”)]
[HttpPost]
[授权]
公共异步任务上载映像(列表文件,Guid id)
{
var file=Request.Form.Files[0];
问题是“文件”是空的,“文件”给出了错误“不正确的内容类型:image/png”


StackTrace[string]:“在Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm()\r\n在Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest.get_Form()”

我曾经遇到过这个问题,我的解决方案是将上载机制绑定到一个ViewModel。这样,我就可以使用附加参数将文件上载到服务器(在您的情况下,是您传递给url的guid)。 为此,我首先创建了一个视图模型

public class UploadImageViewModel
{
    public IFormFile file {get;set;}
    public Guid uniqueId {get;set;}
}
在我的控制器中使用了这个

public async Task<IActionResult> UploadImage(UploadImageViewModel model)
{    
     //Here I can access my file and my Guid       
     var file = model.file; 
     Guid id = model.uniqueId;    
}

您正在测试的浏览器是什么?图像的值是多少?请更新您的帖子出现的异常的完整堆栈跟踪?您使用的是什么版本的jquery?如果您将列表文件更改为格式文件,会发生什么情况?@mjwills我在Chrome中测试,“图像”是:文件{lastModified:1472820029401 lastModifiedDate:Fri Sep 02 2016 05:40:29姓名:“normalIssues3.PNG”大小:70606类型:“image/PNG”webkitRelativePath:}@mjwills更改为IFormFile仍然会给我带来空值。您上载的是单个文件,而
列表
是一个列表,因此您应该上载一个1元素的文件数组。另外,请确认您使用的是
多部分/表单数据
,而不是类似的“原始”文件上载。您是如何获得“图像”的从表单中?当我尝试此操作时,ViewModel的属性最终为空对不起,我忘记了一个步骤…要检索文件并发送到服务器控制器,您需要创建一个javascript对象FormData。因此,要随ajax帖子发送的数据模型的定义是:
var dataModel=new FormData();dataModel.append('file',document.getElementById(“imageUpload”).files[0]);dataModel.append('uniqueId',guid);
通过这种方式填充控制器中的模型。我还注意到,为了工作,您必须使用纯js而不是jQuery检索文件
public async Task<IActionResult> UploadImage(UploadImageViewModel model)
{    
     //Here I can access my file and my Guid       
     var file = model.file; 
     Guid id = model.uniqueId;    
}
var dataModel = new FormData();
dataModel.append('file', document.getElementById("YOUR-FILEUPLOAD-FIELD-ID").files[0]);
dataModel.append('uniqueId', guid);      
$.ajax({
        url: '/Provider/Image/' + guid,  
        type: "POST",  
        contentType: false, // Not to set any content header  
        processData: false, // Not to process data  
        data: image,  
        success: function (result) {  
            alert(result);  
        },  
        error: function (err) {  
            alert(err.statusText);  
        }  
    });