source

IIS가 있는 ASP.NET Core - HTTP 동사 허용되지 않음

ittop 2023. 7. 1. 10:01
반응형

IIS가 있는 ASP.NET Core - HTTP 동사 허용되지 않음

ASP.NET Core 2.0 웹 사이트에서는 UI 향상을 위한 몇 가지 간단한API 방법도 제공합니다.

웹 API 호출은 IIS Express에서 로컬로 실행될 때 예상대로 작동하지만 IIS 8.5 프로덕션 웹 서버에 배포할 때 HTTP를 만들 때 다음 오류가 발생합니다.DELETE그리고.PUT요청...

405 Method Not Allowed

일부 웹 검색 후 IIS WebDAV 모듈을 제거할 것을 제안하는 여러 게시물을 발견했습니다.IIS(서버)에서 이 기능을 사용하지 않도록 설정했으며, 다음과 같은 시도도 했습니다.

  • WebDAV 사용 안 함
  • 개발 및 설정 사용Allow verb filtering = False
  • 다음에 대한 요청 제한 설정에서 모든 동사를 허용하도록 처리기 매핑을 설정합니다.aspNetCore,WebDAV그리고.ExtensionlessUrlHandler-Integrated-4.0

위의 어떤 단계도 우리의 문제를 해결하지 못했습니다.

어떤 조언이나 지시라도 주시면 감사하겠습니다.

이것이 저에게 도움이 되었습니다(넷코어 2.0).

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

다음 위치: https://www.ryadel.com/en/error-405-methods-not-allowed-asp-net-core-put-delete-requests/

몇 시간 동안의 연구와 시행착오 끝에 해결책은 꽤 간단해 보입니다.추가 aWeb.config.NET Core 2.0 응용 프로그램에 파일을 저장합니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <!-- To customize the asp.net core module uncomment and edit the following section. 
         For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
    <system.webServer>
        <modules>
            <remove name="WebDAVModule" />
        </modules>
        <handlers>
            <remove name="aspNetCore" />
            <remove name="WebDAV" />
            <!-- I removed the following handlers too, but these
                 can probably be ignored for most installations -->
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <remove name="OPTIONSVerbHandler" />
            <remove name="TRACEVerbHandler" />

            <add name="aspNetCore" 
                 path="*" 
                 verb="*" 
                 modules="AspNetCoreModule" 
                 resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="%LAUNCHER_PATH%" 
                    arguments="%LAUNCHER_ARGS%" 
                    stdoutLogEnabled="false"
                    stdoutLogFile=".\logs\stdout" />
    </system.webServer>
</configuration>

이게 도움이 되길 바랍니다.

WebDAV를 제거하면 문제가 해결될 수 있지만(저와 마찬가지로) WebDAV가 무엇이며 무엇에 사용되는지 궁금할 수 있습니다.

설명하는 데 도움이 되는 이 페이지를 찾았습니다.

https://www.cloudwards.net/what-is-webdav/

저의 경우 405 오류가 발생했습니다.Net 5 웹 API PUT 및 DELETE 호출.WebDAV(Windows 기능 켜기/끄기 -> IIS -> World Wide Web Services -> Common HTTP 기능 -> WebDAV Publishing)를 제거하는 등의 여러 솔루션을 시도해 보았습니다. "Handler Mappings"에서 WebDAV 항목을 편집하면 응용 프로그램이 엉망이 됩니다.

해결책

IIS에서 응용 프로그램을 선택합니다.

  1. 요청 필터링에서 HTTP 동사를 허용하는 규칙을 추가합니다(단, 이것만으로는 작동하지 않습니다).
  2. "모듈"로 이동한 후 "WebDAV 등록" 모듈을 선택하고 제거합니다.
  3. "Handler Mappings"로 이동한 다음 "WebDAV"를 선택하고 제거합니다.
  4. cmd에서 IISRESET 실행

WebDav를 사용할 수 없도록 하려면 ApplicationHost.config에서 다음 항목을 제거합니다.

<add name="WebDAVModule" /> 

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

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

이것은 에서 저에게 잘 작동했습니다.Net Core 2.1

다음 행을 web.config 파일에 추가합니다.안 되겠군.

Web.config screenshot

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
        <modules>
            <remove name="WebDAVModule" />
        </modules>
      <handlers>
      
            <remove name="WebDAV" />
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DELETE,DEBUG" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
            
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\Ftms.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

IIS 서버에서 WebDAV 등록을 제거합니다.인터넷 정보 서비스 -> 일반적인 Http 기능에 포함됩니다.

https://ignas.me/tech/405-method-not-allowed-iis/

저의 경우, 추가한 후 문제를 해결했습니다.requireAccess="None"aspNetCore

다음과 같이:

<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" requireAccess="None" />

저는 API가 아닌 클라이언트 도메인에 게시하려는 것을 알고 문제를 해결했습니다.[얼굴 손바닥]

IIS의 Handler Mappings에서 aspnetcore에 대한 매핑도 없었습니다..NET 크로스 플랫폼 개발에서 Visual Studio Installer를 열고 개발 시간 IIS 지원을 설치할 수 있게 되었습니다.그런 다음 aspnetcore 핸들러 매핑이 IIS에 표시되었습니다.

VSI

최신 ASP.NET Core 버전으로 개발하고 개발 서버를 사용하는 경우에는 WebDAV 문제가 전혀 아닐 수 있습니다.

과 경와로당신을 하세요.HttpDelete/HttpPut속성이 올바르게 설정되었습니다.그렇지 않으면 메서드가 단순히 일치하지 않는 경우(예: HttpGet one 경로가 선택된 경우) 동일하거나 유사한 오류가 발생합니다.

인터넷에 대한 오랜 연구 끝에 다음과 같이 해결했습니다.

<configuration>
<system.webServer>
    <modules>
        <remove name="ModSecurity IIS (64bits)" />
        <remove name="ModSecurity IIS (32bits)" />
    </modules>
</system.webServer>

WebDav를 사용할 수 없도록 하려면 ApplicationHost.config에서 다음 항목을 제거하거나 주석을 달아야 합니다.

<add name="WebDAVModule" />

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

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

이것은 에서 저에게 잘 작동했습니다.Net Core 2.2

언급URL : https://stackoverflow.com/questions/48188895/asp-net-core-with-iis-http-verb-not-allowed

반응형