我有一个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>
答案 0 :(得分:1)
答案变成与IIS或路由无关。
在本地IIS中调试或从IIS运行站点时,我将应用程序作为子应用程序运行 - 即我的应用程序的地址是http://localhost/
它是Http://localhost/WebScratchPad/
。
由于$ .ajax请求中的这一行,AJAX请求是Http://localhost/Api/GetSomeData/GetNumbers/
的目标:
url: "/Api/GetSomeData/GetNumbers/",
他们应该去Http://localhost/WebScratchPad/Api/GetSomeData/GetNumbers/
通过这样做:
url: "/WebScratchPad/Api/GetSomeData/GetNumbers/",
非常适合在Web.config中进行探索!
当然,整个解决方案并不是理想的动态 - 我的应用程序不应该安装在IIS提供的某个网站的子应用程序上 - 所以我会传递一个前缀从配置或类似的允许&#34; / WebScratchPad /&#34;根据{{3}},部分变得有点动态。