웹 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와 비슷한 일이 잘 작동하기 때문에
난 그냥 혼란 스러워요 (I는 허용 동사를 지정할 필요가 없습니다) : 나는 설정과 관련이있다 생각 각종 게시물에서
[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 동사를 명시 적으로 허용하지 않는 한 지금까지 아무 것도 작동하지 않았습니다.
아, Visual Studio에 내장 된 개발 서버를 사용하고 있습니다.
고마워요!
안녕하십니까, 설명해 주셔서 감사합니다. 예, 허용 된 HTTP 메소드를 지정할 수 있음을 알고 있습니다 (첫 번째 스 니펫 참조). 그리고 저는 "UpdateToken"에서 "PutToken"으로 메소드의 이름을 바꾸면 (좋은 소리는 아니지만) [AcceptVerbs] 속성이 필요하지 않다고 생각했습니다. 그러나 나는 그렇다. 아마도 이것은 AttributeRouting (내 게시물의 첫 번째 문장에서 언급) 때문일 수 있습니다. 실제로 큰 문제는 아닙니다. 내가 필요로하는 곳에 [AcceptVerbs] 속성을 설정하여 살 수 있습니다. 그렇게 많이는 아닐 것이다. 나는 내 web.config를 약간 수정하여 이것을 잊을 수 있기를 바랬다. 다시 한 번 감사드립니다! – Ingmar
@IngmarBode, 증상을 재현하려했지만 시도하지 못했습니다. 메서드 이름을 Put 및 PutToken으로 변경했는데 두 경우 모두 작동했습니다. 다시 시도하고이 대답을 수락하십시오. –