C# 404 HttpPost Ajax调用ASP.NET CORE时出错

C# 404 HttpPost Ajax调用ASP.NET CORE时出错,c#,asp.net,ajax,asp.net-mvc,.net-core,C#,Asp.net,Ajax,Asp.net Mvc,.net Core,我试图在Ajax请求中发布一个文件。它在Localhost中工作,但在服务器上发布之后不工作,它总是返回404 我不知道这是否是路线问题 如果有人能给我一些建议,我将不胜感激 我的代码在这里: 视图: Javascript: @section Scripts { <script type="text/javascript"> j(document).ready(function () { j("#upload").click(function (evt) {

我试图在Ajax请求中发布一个文件。它在Localhost中工作,但在服务器上发布之后不工作,它总是返回404

我不知道这是否是路线问题

如果有人能给我一些建议,我将不胜感激

我的代码在这里:

视图:

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>
@节脚本{
j(文件).准备就绪(功能(){
j(“上传”)。单击(功能(evt){
var fileUpload=$(“#文件”).get(0);
var files=fileUpload.files;
var data=new FormData();
对于(var i=0;i
正如我在you 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);

}

我通过在
controller
类中添加
Route
属性来解决此问题,如下所示:

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

[Route(“/AreaName/[controller]/[action]”)//检查devtools中的网络调用,查看url是否正确(使用url.action-helper方法生成正确的url是一个良好的开端,而不是硬编码url)。也不要发布图像,请以正确的格式发布代码。请以文本而不是图像的形式发布代码。服务器上损坏的URL是什么?将URL写入表单操作(使用Razor助手)更安全并将其读入脚本,而不是写出相对路径——当您将代码移动到其他环境中时,相对路径可能会中断。
var url=$(“#myform”).attr(“action”)
。伙计们,我发布了代码。404 url“正确”吗?您的应用程序是否已安装并在该路径上侦听?如果您删除了UploadFilesAjax的内部构件,并简单地返回了一个成功响应,您是否仍然会收到错误?
[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);

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