C# 如何使用jQuery将文件正确发送到MVC中的控制器

C# 如何使用jQuery将文件正确发送到MVC中的控制器,c#,ajax,xmlhttprequest,asp.net-core-mvc,C#,Ajax,Xmlhttprequest,Asp.net Core Mvc,我有一个视图可以接受这样的文件: <form method="post" id="myform" enctype="multipart/form-data" asp-controller="UploadFiles" asp-action="Index"> <div class="form-group"> <div class="col-md-10"> <p>Seleziona un fil

我有一个视图可以接受这样的文件:

<form method="post" id="myform" enctype="multipart/form-data"
      asp-controller="UploadFiles" asp-action="Index">
    <div class="form-group">
        <div class="col-md-10">
            <p>Seleziona un file ORI ed un file MOD.</p>
            <label for="fileOri">Seleziona ORI</label>
            <input id="fileOri" type="file" name="fileOri" multiple />
            <p></p>
            <label for="fileMod">Seleziona MOD</label>
            <input id="fileMod" type="file" name="fileMod" multiple />
            <p></p>
            <input id="check" name="checkBoxCorreggi" type="checkbox" />
            <label for="check">Correggi Checksum</label>
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-10">
            <p></p>
            <input type="button" id="VerificaChecksum" value="Verifica Checksum" onclick="fileUpload()" />
            <!--value= "Verifica Checksum-->
            <p></p>
        </div>
    </div>
</form>
我试图实现的是将一个文件从客户机传递到控制器,我已经读了很多书,但到目前为止还没有一本有效,这是我的javascript代码,它应该调用我的控制器:

function fileUpload() {
    var fd = new FormData();
    var xhr = new XMLHttpRequest();
    var file = document.getElementById("fileOri").files[0];
    fd.append("file", file);
    xhr.open("POST", "/Home/Dll194/UploadFiles", true);
    xhr.send()

}
[HttpPost("UploadFiles")]
public virtual string UploadFiles()
{
    HttpRequest request = HttpContext.Current.Request;
    var files = request.Files;
    return "Just a test";
}
[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)
但是我在VS2017控制器代码中的断点没有被命中,我做错了什么吗?有人能澄清一下向MVC控制器发送文件的过程吗?我正在使用MVC和Netcore 2.1

编辑:
通过分析我在Fiddler中的调用,它表示调用的响应正常(200),因此我不理解为什么我的控制器上的断点没有被命中。谢谢

尝试使用以下代码编辑函数:

xhr.send(fd)
看一看

在控制器中:

function fileUpload() {
    var fd = new FormData();
    var xhr = new XMLHttpRequest();
    var file = document.getElementById("fileOri").files[0];
    fd.append("file", file);
    xhr.open("POST", "/Home/Dll194/UploadFiles", true);
    xhr.send()

}
[HttpPost("UploadFiles")]
public virtual string UploadFiles()
{
    HttpRequest request = HttpContext.Current.Request;
    var files = request.Files;
    return "Just a test";
}
[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)

将文件放入请求正文:

var file = document.getElementById("fileOri").files[0];
var req = new XMLHttpRequest();
req.open("POST", "/Home/Dll194/UploadFiles", true);
req.setRequestHeader("File-Name", file.name);
req.setRequestHeader("File-Size", file.size);
req.send(file);
然后,您可以将文件保存在ASP.NET Core中:

[HttpPost("UploadFiles")]
public virtual string UploadFiles()
{
    using (FileStream stream = new FileStream(Request.Headers["File-Name"], FileMode.Create))
    {
        await Request.Body.CopyToAsync(stream);
    }
    return "File uploaded!";
}

您可以使用ajax作为formdata传递给控制器

JS:

@节脚本{
函数fileUpload(){
var input=document.getElementById(“fileOri”);
var files=input.files;
var formData=new formData();
for(var i=0;i!=files.length;i++){
formData.append(“文件”,文件[i]);
}
$.ajax(
{
url:“/Home/Upload”,
数据:formData,
processData:false,
contentType:false,
类型:“POST”,
成功:功能(数据){
警报(“已上载文件!”);
}
}
);
}
}
家庭控制器:

function fileUpload() {
    var fd = new FormData();
    var xhr = new XMLHttpRequest();
    var file = document.getElementById("fileOri").files[0];
    fd.append("file", file);
    xhr.open("POST", "/Home/Dll194/UploadFiles", true);
    xhr.send()

}
[HttpPost("UploadFiles")]
public virtual string UploadFiles()
{
    HttpRequest request = HttpContext.Current.Request;
    var files = request.Files;
    return "Just a test";
}
[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)
[HttpPost]
公共异步任务上载(IList文件)

在您的问题标题中有
jQuery
,但您使用
XMLHttpRequest
发送请求。为什么不
$.post()
$.ajax()
?@vasily.sib感谢您的回复…您能提供一个如何实现的示例吗?我看不到任何路由,所以我假设您使用的是默认路由。xhr.open()中的URL似乎不正确,应该是/UploadFiles/UploadFiles(/Controller/Action)。还有,为什么不通过ajax发送表单?@mcb非常感谢您的回复……您能提供一个小例子作为答案吗?@FabioEnne,当然。jQuery文档已经有了这个示例,并且(实际上是ajax的缩写)这应该是一个注释,而不是一个注释answer@bradbury9新用户需要50%的声誉才能添加评论,但你是对的——答案不应该说“试试”。