ASP.NET CORE中HttpPost Ajax调用出现404错误

3
我将尝试在Ajax请求中上传文件。在本地主机上可以正常工作,但在服务器发布后却总是返回404错误。
我不知道这是否是路由问题。
如果有人能给我一些想法,我将不胜感激。
以下是我的代码:
视图:
<form method="post" enctype="multipart/form-data">
<input type="file" id="files"
             name="files" multiple />
<input type="button"
             id="upload"
             value="Upload Selected Files" />

控制器:
    [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:

@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>

2
检查开发工具中的网络调用,并查看URL是否正确(使用Url.Action助手方法生成正确的URL是一个好的开始,而不是硬编码URL)。此外,请勿发布图像,请使用适当的格式发布代码。 - Shyju
请将您的代码作为文本发布,而不是作为图像。服务器上的损坏 URL 是什么?更安全的方法是将 URL 写入表单操作(使用 Razor 助手),并在脚本中读取它,而不是写出相对路径——当您将代码移动到其他环境时可能会引起问题。 var url = $ ("#myform").attr("action") - Jasen
大家好,我已经发布了代码。 - Carlos
404网址是否“正确”?您的应用程序是否已安装并在该路由上侦听? - Jasen
如果您删除 UploadFilesAjax 的内部内容并仅返回成功响应,是否仍会出现错误? - Jasen
你发布代码的域名是什么?它是否包含任何子路径,比如“example.com/sub/”?你可以尝试在ajax调用中添加完整的URL。 - Riddhi
2个回答

5

我注意到您的POST方法中没有打开到所定义URL的路由。请在HttpPost属性中添加路由。如下所示:

[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);

}

2

我通过在controller类上添加Route属性来解决这个问题,就像这样:

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

注意:如果您没有area,请从路由路径中删除AreaName部分。

注:如未使用area,则需将路由路径中的AreaName部分删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接