2012-06-22 43 views
11

這適用於ASP.NET,但也適用於Web API。ASP.NET處理PUT/DELETE動詞

我們如何處理PUT/DELETE動詞而無需啓用RAMMFAR(RunAllManagedModulesForAllRequests)。

我無法在IIS中配置處理程序映射,因爲我的網站託管在Azure Web角色上,所做的任何更改都不會被保留。

回答

19

@亞歷山大的回答讓我在正確的軌道上。不得不添加下面讓DELETE/PUT由ASP.NET處理:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="false"/> 
    <handlers> 
     <remove name="ExtensionlessUrl-Integrated-4.0" /> 
     <add name="ExtensionlessUrl-Integrated-4.0" 
      path="*." 
      verb="GET,HEAD,POST,DEBUG,DELETE,PUT" 
      type="System.Web.Handlers.TransferRequestHandler" 
      preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
+0

請添加以下內容:「您可以在%userprofile%\ documents \ IISExpress \ config」文件夾中修改IIS Express「applicationHost.config」。 – StijnSpijker

+0

除了元素之外,我有上面顯示的所有內容。當我補充說,它開始工作。 –

+0

該版本是否特定?在IIS 8.0中,它會導致500內部服務器錯誤 – Typel

2

已經嘗試允許web.config中System.WebServer部分的動詞?

事情是這樣的:

<System.WebServer> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" 
     path="*." 
     verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
     modules="IsapiModule" 
     scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" 
     resourceType="Unspecified" 
     requireAccess="Script" 
     preCondition="classicMode,runtimeVersionv4.0,bitness64" 
     responseBufferLimit="0" /> 
    </handlers> 
</System.WebServer> 
+0

不幸的是,這似乎並沒有工作 - 我仍然得到了404。 –

+0

請添加這一個

+0

這沒有任何區別,但你的答案確實提示我在applicationHost中查找。配置。我發佈了最終爲我工作的內容。 –

4

FWIW,我們修改了MVC /網絡API項目模板,讓所有使用上述完全相同的機制共同HTTP動詞。更改將在下一次正式下降(將爲RTM)中提供。這將在默認情況下起作用。

+0

感謝Henrik,很高興知道。 –

+0

我在VS 2012中創建了一個新的MVC4應用程序,並從web.config複製設置。 – Jason

+2

2年後,默認情況下仍不起作用。大聲笑。 – Josh