所有 POST MVC 请求都给出 404 错误

All POST MVC Requests give 404 error

我有一个 MVC 应用程序,当我使用 POST 请求时出现 404 错误。

下面是相关的代码:

我有一个 WebAPI 控制器(尽管 "pure" MVC 控制器也会发生这种情况),其中只有一个方法:

public class GetSomeDataController : ApiController
{
    [HttpPost]
    public string GetNumbers([FromBody]string value)
    {
        // Get 10 randomised numbers

        return //The numbers as JSON;
    }
}

在 JavaScript 我有一个 ajax 请求:

$.ajax({
    type: "POST",
    url: "/Api/GetSomeData/GetNumbers/",
    data: JSON.stringify(requestData),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    processData: false, // Pass the data in the body of the request rather than in the URI.
})
.done(function (ajaxResult) {
    // handle the results
})
.fail(function (e) {
    // Handle errors
});

当我在 VS 2013 中调试它时,我得到了我的 10 个数字,一点问题都没有。然而,当我 运行 IIS 8.5 中完全相同的代码时...

该页面本身是一个 MVC 路由页面,因此路由在服务器上运行,但当我从 POST 调用控制器操作时它不起作用。

错误页面报告说 StaticFile 处理程序似乎正在尝试处理请求 - 当然会失败。

我正在努力弄清楚发生了什么。有人有什么想法吗?

这些是我记得尝试过的事情:

向 web.config 添加各种内容(无明显效果):

<system.web>
    <httpModules>
        <add name="UrlRoutingModule"
            type="System.Web.Routing.UrlRoutingModule,
            System.Web.Routing, Version=3.5.0.0,
            Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </httpModules>
</system.web>
<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>

,

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>

答案原来与 IIS 或路由无关。

在本地 IIS 或 运行 来自 IIS 的站点进行调试时,我是 运行 作为子应用程序的应用程序 - 即我的应用程序的地址不想 http://localhost/ 它是Http://localhost/WebScratchPad/.

AJAX 请求的目标是 Http://localhost/Api/GetSomeData/GetNumbers/ 因为 $.ajax 请求中的这一行:

url: "/Api/GetSomeData/GetNumbers/",

他们应该去 Http://localhost/WebScratchPad/Api/GetSomeData/GetNumbers/

通过这样做:

url: "/WebScratchPad/Api/GetSomeData/GetNumbers/",

Web.config!

当然这不是整个解决方案,理想情况下它是动态的——我的应用程序不应该安装在 IIS 服务的某些网站的子应用程序上——所以我将从配置或类似允许“/WebScratchPad/”部分根据 this SO answer.

有点动态