【问题标题】:Why do I get a 404 when sending an ajax request on the server but not locally?为什么我在服务器上发送 ajax 请求而不是在本地发送 404?
【发布时间】:2017-03-08 19:51:16
【问题描述】:

作为数据网格的一部分,我希望用户能够上传文件。我通过对服务器的 jquery ajax 调用来完成此操作。这是我的 ajax 调用:

var formData = new FormData();
formData.append("file", Data.File); //Data.File is a File object from a file input
$.ajax({
    type: "POST",
    url: "@Url.Action("UploadFile")",
    data: formData,
    contentType: false,
    processData: false
});

还有,这是我的控制器动作签名:

[HttpPost]
public IActionResult UploadFile()

当我通过 IIS Express 在本地测试它时,它运行良好。但是,当我发布到 IIS Web 服务器时,它只会给我 404 错误。我已经研究了 IIS 端的可能原因,但它们似乎都与大文件有关。我正在测试的文件并不大。我测试过的所有文件都不到 1 MB。我还有另一个页面允许通过 ajax 上传文件,并且该页面在本地或 Web 服务器上都没有遇到任何问题。

这不是在此页面上进行的唯一 ajax 调用,但它是唯一失败的。

【问题讨论】:

  • 那么请求的 URL 是什么,应该是什么?它们有何不同?检查浏览器的 Network 控制台
  • 这是它请求的 URL:http://[site]/[subdomain]/DataGrid/UploadFile。这正是它应该是的。
  • 应该工作吗?如果发送 cURL 请求,是否返回 404 状态~curl -v -X POST -H "Content-Type:" "http://[site]/[subdomain]/DataGrid/UploadFile"
  • 好吧,我做了上面的事情(除了 Powershell 和“Invoke-WebRequest -URI”),是的,我得到了 404。
  • 听起来你的服务器端应用程序配置不正确

标签: jquery ajax file-upload asp.net-core-mvc iis-8


【解决方案1】:

起初,我很困惑,因为正如我在原始帖子中指出的那样,我有一个页面正在执行与我目前遇到问题的完全相同的操作。然而,在痛苦的很长一段时间后,我意识到由于抛出了一些异常,该操作可能会返回 404。所以我做了理性的事情,在我的代码中放了一个 try-catch 块并返回任何错误。

那时我意识到,虽然调用是相同的,但我在后端做的是不同的事情。我忘记了该站点依赖于我在本地安装的软件,而不是网络服务器上的软件。在服务器上安装该软件后,文件上传正常。

tl;dr:该操作返回 404,因为它由于 Web 服务器上缺少软件而引发异常。

【讨论】:

  • 听起来您的异常处理程序返回了错误的响应代码。这应该是 “500 - 内部服务器错误”
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2019-04-19
  • 2017-01-17
相关资源
最近更新 更多