ASP.NET Web API를 사용하여 REST 서비스를 작성했습니다. HttpDelete 요청을 보내려고하는데 다음과 같은 오류가 발생합니다.
405-이 페이지에 액세스하는 데 사용되는 HTTP 동사가 허용되지 않습니다.
나는 해결책에 가깝다고 생각하고 IIS 원격 관리를 활성화하고 Handler Mappings 섹션으로 이동하여 적절한 위치에 DELETE 동사를 추가해야한다는 것을 알았지 만 문제는 많은 다른 위치가 있다는 것입니다. 목록 … (여기와 같은 : http://www.somacon.com/p126.php ).
어느 것을 편집해야합니까? 그들 중 일부는 “ExtensionUrlHandler-Integrated-4.0″과 같은 확장자가 없으며 여기에 DELETE 동사를 추가했지만 여전히 작동하지 않습니다.
그 사진을 수정하는 것은 어둠 속에서 촬영 한 것뿐입니다. 다른 위치를 수정해야합니까? 그렇다면 어느 것입니까? 아니면 내가해야 할 일이 더 있습니까?
동일한 웹 서비스가 내 로컬 서비스에서 완벽하게 작동하므로 문제가 원격 IIS에 있다고 생각합니다.
인사말
답변
이 오류의 일반적인 원인은 WebDAV 입니다. 제거했는지 확인하십시오.
답변
WebDAV를 제거 할 필요가 없습니다. web.config에 다음 줄을 추가하기 만하면됩니다.
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
답변
Web.Config 파일을 아래와 같이 변경하십시오.
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV"/>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
답변
Web.Config 파일을 아래와 같이 변경합니다. 매력처럼 행동합니다.
노드 <system.webServer>
에서 코드 부분 아래 추가
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
추가 후 Web.Config는 다음과 같습니다.
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<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" />
</handlers>
</system.webServer>
답변
이 문제가 있었고 다음을 해결했습니다.
- 핸들러 매핑 창에서 WebDAV 찾기
- 모듈 매핑 편집에서 요청 제한을 엽니 다.
답변
위의 솔루션 중 어느 것도 내 경우와 같이 문제를 해결하지 못하면 (여전히 RestClient 모듈이 405를 향하고 있음) Postman 또는 Fiddler와 같은 도구로 Api를 요청하십시오. 문제가 잘못된 형식의 요청과 같은 다른 곳에있을 수 있음을 의미합니다.
내 RestClient 모듈이 형식이 잘못된 Id 매개 변수로 ‘Put’을 요청하고 있음을 발견했습니다.
http://myserver/api/someresource?id=75fd954d-d984-4a31-82fc-8132e1644f78
대신에
http://myserver/api/someresource/75fd954d-d984-4a31-82fc-8132e1644f78
놀랍게도 잘못된 형식의 요청은 405-Method Not Allowed (IIS 7.5)를 반환합니다.
답변
드물지만 일부 도움이 될 수 있습니다.
System.Web.Http의 [HttpPut] 을 사용하고 있는지 확인하십시오.
우리는 HttpPut 데코 레이 티드 메서드에서 ‘허용되지 않는 메서드’405를 얻었습니다.
실수로 System.Web.Http가 아닌 System.Web.Mvc 의 [HttpPut] 특성을 사용했기 때문에 문제가 드물게 보입니다.
그 이유는 resharper가 .Mvc 버전을 제안했기 때문입니다. 일반적으로 System.Web.Http는 ApiController 에서 직접 파생 될 때 이미 참조 되어 ApiController를 확장 한 클래스를 사용했습니다.