Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# .Net核心文件在Web api中不起作用_C#_Asp.net Core - Fatal编程技术网

C# .Net核心文件在Web api中不起作用

C# .Net核心文件在Web api中不起作用,c#,asp.net-core,C#,Asp.net Core,我有一个使用ajax提交的文件,但在服务器上我没有收到任何东西 let file = document.getElementById('file').files[0]; 我不做ajax调用 axios.post('http://localhost:5000/File/Create', file) 在我的.Net内核中,我期待着这个 [HttpPost] public IActionResult Create([FromBody] IFormFile file) {

我有一个使用ajax提交的文件,但在服务器上我没有收到任何东西

let file = document.getElementById('file').files[0];
我不做ajax调用

axios.post('http://localhost:5000/File/Create', file)
在我的.Net内核中,我期待着这个

    [HttpPost]
    public IActionResult Create([FromBody] IFormFile file)
    {

        return Ok();
    }

这是行不通的。我在数据类型中的措辞是错误的。

我不确定
axios
如何处理上传。但通常需要发送包含该文件的FormData。使用jQuery ajax发送表单数据时,需要确保将
processData
contentType
标志设置为
false

像这样的东西会有用的

$("#saveBtn").click(function(e) {
    e.preventDefault();

    var fdata = new FormData();

    var fileInput = $('#logo')[0];
    var file = fileInput.files[0];
    fdata.append("logo", file);

    $.ajax({
        type: 'post',
        url: "@Url.Action("Create", "File")",
        data: fdata,
        processData: false,
        contentType: false
    }).done(function(result) {
        // do something with the result now
        console.log(result);
    });

});
假设您在FileController中有一个创建操作方法,该方法获取文件并将其保存到应用程序根目录中的某个目录中

public class FileController : Controller
{
    private readonly IHostingEnvironment hostingEnvironment;
    public FileController(IHostingEnvironment environment)
    {
        hostingEnvironment = environment;
    }
    [HttpPost]
    public IActionResult SaveFile(IFormFile logo)
    {
        if (logo != null)
        {
            //simply saving to "uploads" directory
            var uploads = Path.Combine(hostingEnvironment.WebRootPath, "uploads");
            var filePath = Path.Combine(uploads, logo.FileName);
            logo.CopyTo(new FileStream(filePath, FileMode.Create));  
            return Json(new { status = "success" });              
        }
        return Json(new { status = "error" });
    }
}

不幸的是,我们对您的问题进行了简要描述,但假设您的客户端和服务上的所有其他配置都已正确配置

我认为您的主要问题是发送的数据缺少
键:“file”
,这导致
文件
被接收为
null
。因此,这必须起作用:

axios.post
(
  'http://localhost:5000/File/Create',
  {
    file: file
  }
)

希望这有帮助。

请显示发送的数据以及服务器上的
文件所包含的内容。另外,如果不是
AJAX
post,那么
axios
可以做什么?有关如何使用axios上载文件的信息,请参阅。至少,您需要使用
FormData
。您在客户端做得不对。看一看。