5
我用我的網絡API(MVC 4)AttributeRouting。請求的資源不支持HTTP方法「PUT」
爲什麼這樣嗎?
[AcceptVerbs("PUT")]
[PUT("api/v1/tokens/current")]
public MemoryToken UpdateToken([FromBody] DeviceTokenViewModel viewModel)
{...}
而這一個不?
[PUT("api/v1/tokens/current")]
public MemoryToken UpdateToken([FromBody] DeviceTokenViewModel viewModel)
{...}
錯誤消息:請求的資源不支持http方法「PUT」。 爲什麼我必須明確接受PUT動詞?
我只是困惑,因爲與POST類似的工作就好了(我沒有指定接受動詞):
[POST("api/v1/tokens")]
public MemoryToken CreateToken()
{...}
從各個崗位我相信這與設置做在我的web.config。網絡服務器部目前看起來是這樣的:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="AttributeRouting" path="routes.axd" verb="*" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
</handlers>
我試着像刪除WebDAV和東西兩件事情。但目前爲止沒有任何工作(除非在註釋中明確允許PUT動詞)。
哦,我使用內置的開發服務器視覺工作室。
謝謝你們!
嗨,謝謝你的解釋。是的,我知道我可以指定允許的HTTP方法(請參閱第一個片段)。我也這麼認爲,如果我只是將我的方法從「UpdateToken」重命名爲「PutToken」(儘管聽起來不太好),我不需要[AcceptVerbs]屬性。但是我願意。也許這是由於AttributeRouting(在我的文章的第一句中提到)。這其實並不是什麼大事。我可以在設置[AcceptVerbs]屬性的地方居住,只要我需要它們。不會那麼多。我只是希望我可以通過調整我的web.config來忘記這一點。再次感謝! – Ingmar
@IngmarBode,我試圖重現你的症狀,但不能 - 我改變了方法名放和PutToken,並在這兩種情況下工作。請重試並考慮接受此答案。 –