【发布时间】:2015-12-02 17:27:23
【问题描述】:
我有一个 MVC 应用程序,当我使用 POST 请求时出现 404 错误。
以下是相关的代码:
我有一个 WebAPI 控制器(虽然这也发生在“纯”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>
【问题讨论】:
-
试试这个方法:
url: "/Api/GetSomeData" -
我已经尝试过了,但它在 VS 中调试或从 IIS 运行时都不起作用 - 请注意,我不希望它如此,因为我注册的 WebAPI 路由需要一个操作以及一个控制器:
routeTemplate: "api/{controller}/{action}" -
谢谢 - 我正在根据标题为 HTTP 方法和按操作名称路由的部分组合配置和使用我的路由。正如我在帖子中所说,这不是路由问题 - 路由会在 IIS Express 中显示调试 - 这是一个 IIS 配置问题。
标签: ajax asp.net-mvc asp.net-mvc-5 iis-8