"PUT"방법에 대해 IIS7.5에서 "405 방법이 허용되지 않음"


113

WebClienttype을 사용 하여 * .cab 파일을 서버에 업로드합니다. 서버 측에서는 아래와 같이 PUT 메서드를 사용하여 * .cab 파일에 대한 HTTP 처리기를 등록했습니다.

 <add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />

하지만 항상 "405 메서드 허용 안 됨"오류가 발생합니다. 응답에 따르면 허용되는 방법은 다음과 같습니다.

Headers = {Allow: GET, HEAD, OPTIONS, TRACE
Content-Length: 1293
Content-Type: text/html
Date: Fri, 27 May 2011 02:08:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET}

웹 응용 프로그램에 대한 IIS 요청 필터링에서 PUT 메서드를 명시 적으로 허용하더라도 동일한 오류가 계속 발생합니다.

이것이 IIS 관련 문제라고 생각합니다. 나는 누군가가 나를 위해 이것에 대해 약간의 빛을 비추어 줄 수 있기를 바랍니다.

답변:


214

종종이 오류는 이러한 종류의 요청을 처리하려는 WebDAV 모듈로 인해 발생합니다. 쉬운 해결책은 모듈과 system.webServerweb.config 파일 내 섹션의 핸들러에서 제거하는 것입니다 . 다음은 구성 예입니다.

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>

2
다음 MS 기사를 사용하여 처리기에 제거 태그를 추가했지만 여전히 작동하지 않았습니다. 귀하의 답변 덕분에 모듈 섹션에 추가해야했습니다. 매우 감사. 여기에 기사가 있습니다 : asp.net/web-api/overview/testing-and-debugging/…
Tod Birdsall

좋아, 당신은 고통스러운 디버깅 시간을 절약했습니다! :)
Kaspars Ozols

간단하고 쉬운 수정, 감사합니다!
MorenajeRD

나는 그것을 시도했지만 나를 위해 작동하지 않습니다. 여전히 오류 405-메서드가 허용되지 않습니다. IIS Express를 사용하고 있으며 오류는 PUT에서만 발생하지만 GET, POST 및 DELETE에서 작동합니다.
Thierry

46

실패한 요청 추적을 활성화하고 다음 정보를 얻었습니다.

 <EventData>
  <Data Name="ContextId">{00000000-0000-0000-0F00-0080000000FA}</Data>
  <Data Name="ModuleName">WebDAVModule</Data>
  <Data Name="Notification">16</Data>
  <Data Name="HttpStatus">405</Data>
  <Data Name="HttpReason">Method Not Allowed</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>

그래서 IIS에서 WebDAVModule을 제거했습니다. 이제 모든 것이 정상입니다 ~

IIS 추적 기능은 매우 유용합니다.


1
답변 해 주셔서 감사합니다! 2 일 간의 조사 후, "405 Method Not Allowed"를 피하는 유일한 해결책 Application_BeginRequest은이 답변 stackoverflow.com/a/14631068/827168 에서 언급했듯이 메서드에 CORS 헤더를 정의하는 것 입니다. 이 문제를 발견하는 대신 어떤 임의의 패치 : 적용 할 수 있기 때문에하지만 당신의 대답은 다른 모든 것보다 낫다
pomeh

@pomeh 항상 논리를 완성한다고 믿습니다. :)
smwikipedia

1
@Demodave 여기에서 확인하십시오 : technet.microsoft.com/en-us/library/cc731223%28v=ws.10%29.aspx
smwikipedia

1
또한 Handler Mappings로 이동하여 거기에서 WebDAV를 삭제해야합니다 Handler "WebDAV" has a bad module "WebDAVModule" in its module list. 그렇지 않으면 오류 메시지가 표시 됩니다.
pipedreambomb

26

MVC4 WebApi 프로젝트를 호스팅 할 때 WebDAV에이 문제가 발생했습니다. web.config에 다음 줄을 추가하여 문제를 해결했습니다.

<handlers>
  <remove name="WebDAV" />
  <add name="WebDAV" path="*" verb="*" modules="WebDAVModule"
      resourceType="Unspecified" requireAccess="None" />
</handlers>

여기에 설명 된대로 : http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html


실제로 WebDAV가 필요한 사람을위한 최상의 솔루션입니다. 누구나 WebDAV가 필요한지 여부는 별도의 논의입니다.
MrBoJangles

24

여기 에서 찍은 그리고 그것은 나를 위해 일한 :

1. IIS 관리자로 이동합니다.

2. 앱을 클릭합니다.

3. "Handler Mappings"로 이동합니다.

4. 기능 목록에서 "WebDAV"를 두 번 클릭합니다.

5. "Request Restrictions"를 클릭합니다.

6. "동사"탭에서 "모든 동사"를 선택합니다.

7. OK를 누릅니다.


3
이것은 나를 도왔지만 내 경험으로 명확히 할 것입니다. 2. (웹 서비스) 앱. 3. 가운데 패널에서 처리기 매핑 아이콘을 두 번 클릭합니다.
Gary

19

나는 대부분의 답변을 시도했지만 불행히도 그들 중 아무도 완성되지 않았습니다.

여기에 저에게 효과적이었습니다. PUT을 원하는 사이트에 대해 수행 할 3 가지 작업이 있습니다 (사이트 선택).

  1. 오른쪽 표시 줄에있는 옵션을 열고 WebDav Authoring Rules선택 Disable WebDAV합니다.

  2. 을 선택 Modules하고 찾아서 WebDAV Module제거합니다.

  3. 을 선택 HandlerMapping하고 찾아서 WebDAVHandler제거합니다.

IIS를 다시 시작하십시오.


이것은 작동합니다! web.config 파일을 편집하여 세 단계를 모두 수행 할 수 있는지 여부는 알 수 없지만 IIS 관리 콘솔 만 사용하면 쉽게 수행 할 수 있습니다. WebDAV *로 시작하는 3 개의 HandlerMapping 항목이 있다는 점에 유의하십시오. 3 개를 모두 제거했고 인생은 좋았습니다.
SlimsGhost

1
WebDav를 제거하려고했지만 작동하지 않았습니다. 그런 다음 위의 세 단계를 모두 수행하고 PUT작업을 시작했습니다.
rareyesdev

1
2 단계와 3 단계는 사이트의 나머지 부분에 영향을주지 않고 가상 디렉터리에 적용 할 수 있습니다.
Tonatio

1
감사합니다. 넌 나를 구했다. 7 시간의 좌절 후, 내가 할 수있는 모든 대답을 시도했고 마침내 당신의 대답이 내게 맞았습니다. :)
Zeeshan Safdar

1
감사합니다.
Ahmad Hamdy

17

WebDAV 모듈을 제거하면 충분합니다. Web.config를 변경하십시오.

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />

14

사용하지 않는 WebDAV 기능을 제거하는 것이 가장 좋습니다. 로 이동하여 프로그램 및 기능 => Windows 기능 사용 및 사용 안 함 WebDAV를 출판 에서

인터넷 정보 서비스 => World Wide Web 서비스 => 일반적인 HTTP 기능

여기에 이미지 설명 입력


감사 ! 이것은 내 문제를 완전히 해결했습니다!
wmehanna

4

어떤 이유로 든 내 web.config에서 WebDAVModule을 "제거"로 표시하는 것만으로는 문제를 해결할 수 없었습니다.

나는 다른 방법을 발견했습니다 않은 문제를 해결합니다. 같은 보트에있는 경우 다음을 시도하십시오.

  1. IIS 관리자에서 PUT를 지원해야하는 응용 프로그램을 선택합니다.
  2. 기능보기에서 WebDAV 제작 규칙을 찾습니다 . 두 번 클릭하거나 상황에 맞는 메뉴에서 기능 열기를 선택 합니다 (오른쪽 클릭).
  3. 작업 창에서 WebDAV 설정 ...을 찾아 클릭 합니다. .
  4. WebDAV 설정에서 요청 필터링 동작을 찾습니다. 찾은 다음 그 아래에서 Allow Verb Filtering을 찾습니다 . 설정은 동사 필터링 허용거짓을 .
  5. 작업 창에서 적용을 클릭 합니다.

이렇게하면 WebDAV가 지원하지 않는 동사를 거부하지 못하므로 PUT가 방해받지 않고 RESTful 핸들러를 통과 할 수 있습니다.


4

나에게서 또 다른 팁. PHP + IIS를 사용했으며 PHP 용 핸들러 매핑에는 PUT 동사가 없습니다.

IIS Manager-> Your site-> Handler Mappings-> PHPxx_via_FastCGI-> Request Restrictions-> Verbs로 이동 한 다음 PUT를 추가합니다.

그게 다야!


1
이것이 PHP 사용자에게 필요한 대답입니다.
SpeedOfRound

4

PUT 및 DELETE가 작동하기 전에 재구성이 필요한 또 다른 중요한 모듈은 옵션 동사입니다.

<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="OPTIONSVerbHandler" />
<remove name="WebDAV" />
<add name="OPTIONSVerbHandler" path="*" verb="*" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="Script" />
</handlers>

이 게시물도 참조하십시오 : https://stackoverflow.com/a/22018750/9376681



3

저는 Angular 8을 사용하고 있었고 .NET 코어 API였습니다. 내 서비스 web.config 파일에 다음을 추가합니다. 그것은 내 오류를 해결합니다.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>

2

나 에게이 오류는 사라지지 않고 내가 한 일이 무엇이든간에 PUT 메서드를 허용하지 않습니다. .. 요청을 처리하는 iis 핸들러 매핑에 PUT가 구성되어 있는지 확인합니다.

내 문제는 결국 ASP.NET 4.5 Extensions의 잘못된 설치로 인해 발생했습니다. 서버 역할 및 기능에서 asp.net과 관련된 모든 것을 제거했습니다. 다시 시작되었습니다. 역할을 읽고 다시 시작했습니다. 위의 구성으로 모든 것이 작동했습니다.

--- 아래는 PUT를 수락하지만 잘못된 핸들러로 전송합니다. -아래 무시

마지막으로, iis의 TRACE 처리기 매핑에서 허용 동사로 PUT 동사를 추가하면 실패한 오류 추적을 활성화했기 때문에이 동사가 동사를 허용하지 않았습니다.

지난번에 다른 서버의 IIS에서 동일한 문제가 발생했을 때 기본 문서를 사용하지 않고 기본 처리기를 사용하고 있었기 때문에 URL 끝에 '/'가 누락되어 있었으며 이제는이를 알고 있습니다. IIS를 확인하십시오. 아무것도 도움이되지 않는 경우 핸들러 매핑.


2

이 문제가 있었지만 WebDAV와 관련된 문제는 없었습니다. 제 경우에는 클라이언트가 www.myServer.com/api/chart에 POST를 보냈습니다. 이 호출은 "ExtensionlessUrlHanlder-Integrated-4.0"에 의해 처리되어야하지만 어떻게 든 내 서버 디렉토리 "... \ Server \ api \ chart \"에 로컬 파일 구조가 생성되었습니다. 이것은 "StaticFile"핸들러가 대신 호출되었음을 의미합니다. 해당 로컬 파일을 삭제하면 마침내 문제가 해결되었습니다.


2

나를 위해 일한 것은 다음과 같습니다.

IIS를 열고 사이트를 클릭하십시오.

1 - Double Click on the Modules 2 - Right Click on WebDavPublishing and remove. 3 - Restart running WebSite.


1

Windows 서버 2012의 경우-> 서버 관리자-> 역할 및 기능 제거-> 서버 역할-> 웹 서버 (IIS)-> 웹 서버-> 공통 HTTP 기능-> WebDAV 게시를 선택 취소하고 제거-> 서버를 다시 시작합니다.


0

IIS 앱 풀이 클래식 모드에서 실행중인 경우 web.config에 다음이 있는지 확인하십시오.

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />

    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />

0

필자의 경우 웹 배포를 다른 포트 (80이 아닌 IIS 포트)로 재배치했습니다. 처음에는 인식하지 못했지만 동일한 포트에서 실행되는 오류가 없었음에도 불구하고 Web Deploy가 어떤 이유로 IIS 대신 먼저 응답하여이 오류를 일으켰을 가능성이 높습니다. 방금 IIS 바인딩을 다른 포트로 옮겼는데 모두 정상입니다. ;)


0

WebDav가 전혀 활성화되지 않도록하려면 ApplicationHost.config에서 다음 항목을 제거합니다. <add name="WebDAVModule" />

항목은 모듈 섹션에 있습니다.

구성의 정확한 위치 : C:\Windows\System32\inetsrv\config\applicationHost.config


0

aspnet 코어에서 실행되는 RESTful API로 동일한 문제가 발생했습니다.

WebDAV를 제거하고 싶지 않았고 위에서 설명한 대부분의 해결 방법을 시도했습니다. 사이트와 서버 자체 모두에서 verbs = "*"를 설정하려고했지만 성공하지 못했습니다.

나를 위해 트릭은 다음과 같습니다.

IIS 관리자-> 사이트-> MySite-> HandlerMappings-> aspNetCore-> 편집

-> 요청 제한-> 액세스-> 없음 (스크립트였습니다).

그 후 원래 WebDAV 옵션을 교체하더라도 모든 것이 작동했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.