2015-12-02 96 views
1

我有一個MVC應用程序,當我使用POST請求時會出現404錯誤。所有POST MVC請求給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完全相同的代碼... enter image description here

頁面本身是一個MVC路由頁面,以便路由工作在服務器上,但是當我把一個控制器的動作從POST這是行不通的。

錯誤頁面報告StaticFile處理程序似乎試圖處理請求 - 當然哪個失敗。 enter image description here

我正在試圖弄清楚發生了什麼。有沒有人有任何想法?

這些都是事我還記得想:

添加各種東西的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
  • 禁用和重新啓用ASP.NET 4.5在Windows功能和設置
  • ASPNET_REGIIS - 我(不支持IIS 8.5)
  • 跟蹤請求:(沒有新的資料) enter image description here

  • 更改ExtensionlessUrlHandler集成-4.0請求路徑爲「*」

  • 更改ExtensionlessUrlHandler集成-4.0動詞(POST已列入名單)
+0

試試這種方式:'url:「/ Api/GetSomeData」' –

+0

我已經嘗試過了,它不能在VS中調試或從IIS運行 - 請注意,我不希望它成爲WebAPI路由我已經註冊需要一個行動以及一個控制器:'routeTemplate:「api/{controller}/{action}」' – JaySeeAre

+0

檢查這個http://www.asp.net/web-api/overview/web-api- routing-and-actions/routing-in-aspnet-web-api –

回答

1

答案輪流放是沒什麼使用IIS或路由。

當在本地IIS中調試或從IIS運行站點時,我將應用程序作爲子應用程序運行 - 即我的應用程序的地址不是http://localhost/它是Http://localhost/WebScratchPad/

Ajax請求在Http://localhost/Api/GetSomeData/GetNumbers/ aimiing,因爲這條線在$就要求:

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

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

他們應該這樣去了Http://localhost/WebScratchPad/Api/GetSomeData/GetNumbers/

這麼多在我們周圍徘徊b.config!

當然,這不是完整的解決方案,因爲idealy將是動態的 - 我的應用程序不應該安裝在由IIS提供的某個網站的子應用程序中 - 所以我會從配置中傳遞前綴或類似的,以允許「/ WebScratchPad /」部分按照this SO answer有點動態。