所有 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>
- 我绝对运行正在集成模式
- 应用程序池运行正在一个可以访问该文件夹的帐户下
- 应用程序池在 .NET 4.0 中 运行ning
- 在 Windows 功能和设置中禁用和重新启用 ASP.NET 4.5
- aspnet_regiis - i(不支持 IIS 8.5)
跟踪请求:(无新信息)
将 ExtensionlessUrlHandler-Integrated-4.0 请求路径更改为“*”
- 更改 ExtensionlessUrlHandler-Integrated-4.0 动词(POST 已包含在列表中)
答案原来与 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.
有点动态
我有一个 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>
- 我绝对运行正在集成模式
- 应用程序池运行正在一个可以访问该文件夹的帐户下
- 应用程序池在 .NET 4.0 中 运行ning
- 在 Windows 功能和设置中禁用和重新启用 ASP.NET 4.5
- aspnet_regiis - i(不支持 IIS 8.5)
跟踪请求:(无新信息)
将 ExtensionlessUrlHandler-Integrated-4.0 请求路径更改为“*”
- 更改 ExtensionlessUrlHandler-Integrated-4.0 动词(POST 已包含在列表中)
答案原来与 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.
有点动态