简体   繁体   English

HttpPost Ajax调用ASP.NET CORE时发生404错误

[英]404 error in HttpPost Ajax call ASP.NET CORE

I am trying to post a file in an Ajax request. 我正在尝试在Ajax请求中发布文件。 It is working in Localhost but not after publish on server, it is always returning 404. 它在Localhost中运行,但在服务器上发布后却无法运行,它始终返回404。

I don't know if it is a route problem. 我不知道这是否是路线问题。

I appreciate if someone can give me some idea. 如果有人可以给我一些想法,我将不胜感激。

My code is here: 我的代码在这里:

View: 视图:

<form method="post" enctype="multipart/form-data">
<input type="file" id="files"
             name="files" multiple />
<input type="button"
             id="upload"
             value="Upload Selected Files" />

Controller: 控制器:

    [HttpPost]
    public IActionResult UploadFilesAjax()
    {
        long size = 0;
        var files = Request.Form.Files;
        foreach (var file in files)
        {
            var filename = ContentDispositionHeaderValue
                                            .Parse(file.ContentDisposition)
                                            .FileName
                                            .Trim('"');
            filename = hostingEnv.WebRootPath + $@"\{filename}";
            size += file.Length;
            using (FileStream fs = System.IO.File.Create(filename))
            {
                file.CopyTo(fs);
                fs.Flush();
            }
        }
        string message = $"{files.Count} file(s) / {size} bytes uploaded successfully!";

        return Json(message);

    }

Javascript: Javascript:

@section Scripts {
<script type="text/javascript">
    j(document).ready(function () {
        j("#upload").click(function (evt) {
            var fileUpload = $("#files").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]);
            }
            $.ajax({
                type: "POST",
                url: "/Exemplos/UploadFilesAjax",
                contentType: false,
                processData: false,
                data: data,
                success: function (message) {
                    alert(message);
                },
                error: function (e) {

                    alert("There was error uploading files!");
                }
            });
        });
    });
</script>

As I have noticed in you POST method there is no route opened to the URL you defined. 正如我在您的POST方法中注意到的那样,没有打开到您定义的URL的路由。 Please add route to the HttpPost attribute. 请添加路由到HttpPost属性。 It would looks like below, 如下图所示

[HttpPost("/Exemplos/UploadFilesAjax")]
public IActionResult UploadFilesAjax()
{
    long size = 0;
    var files = Request.Form.Files;
    foreach (var file in files)
    {
        var filename = ContentDispositionHeaderValue
                                        .Parse(file.ContentDisposition)
                                        .FileName
                                        .Trim('"');
        filename = hostingEnv.WebRootPath + $@"\{filename}";
        size += file.Length;
        using (FileStream fs = System.IO.File.Create(filename))
        {
            file.CopyTo(fs);
            fs.Flush();
        }
    }
    string message = $"{files.Count} file(s) / {size} bytes uploaded successfully!";

    return Json(message);

}

I solve this problem by adding Route attribute on controller class like this: 我通过在controller类上添加Route属性来解决此问题,如下所示:

[Route("/AreaName/[controller]/[action]")] // <-- this line
[ApiController]
public class GlobalController : ControllerBase
{
 ...
}

NOTE: if you haven't area remove AreaName part from rout path. 注意:如果您没有area则从溃败路径中删除AreaName部分。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM