为什么在服务器上发送ajax请求时发生404错误,但本地不发送?

问题描述:

作为数据网格的一部分,我希望用户能够上传文件。我通过jquery ajax调用服务器完成了这个任务。这里是我的Ajax调用:为什么在服务器上发送ajax请求时发生404错误,但本地不发送?

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快速测试这个地方,它完美的作品。但是,当我发布到IIS Web服务器时,它只会给我404错误。我研究了IIS端的可能原因,但他们似乎都处理大文件。我正在测试的文件并不大;所有我测试过的都在1 MB以下。我还有另一个页面,允许通过ajax进行文件上传,并且该页面在本地或Web服务器上不会遇到任何问题。

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

+0

那么请求的URL是什么?应该是什么?他们有什么不同?检查您的浏览器*网络*控制台 – Phil

+0

以下是它请求的URL:http:// [site]/[subdomain]/DataGrid/UploadFile。这正是它应该的。 – greenjaed

+0

那*应该*工作?如果你发送一个cURL请求,它是否返回404状态〜'curl -v -X POST -H“Content-Type:”“http:// [site]/[subdomain] /DataGrid/UploadFile” – Phil

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

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

tl; dr:由于Web服务器上缺少软件而引发异常,因此返回了404。

+0

听起来像您的异常处理程序正在返回错误的响应代码。这应该是一个*“500 - 内部服务器错误”* – Phil