[asp.net] Asp.NET Web API-405-이 페이지에 액세스하는 데 사용되는 HTTP 동사가 허용되지 않음-처리기 매핑 설정 방법

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>


답변

이 문제가 있었고 다음을 해결했습니다.

  1. IIS 열기
  2. 백엔드 사이트 선택

    여기에 이미지 설명 입력

  3. 기능보기에서 : 핸들러 매핑 열기

여기에 이미지 설명 입력

  1. 핸들러 매핑 창에서 WebDAV 찾기

여기에 이미지 설명 입력

  1. 모듈 매핑 편집에서 요청 제한을 엽니 다.

여기에 이미지 설명 입력

  1. 여기에 이미지 설명 입력

답변

위의 솔루션 중 어느 것도 내 경우와 같이 문제를 해결하지 못하면 (여전히 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를 확장 한 클래스를 사용했습니다.