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에서 응용 프로그램을 선택합니다.
- 요청 필터링에서 HTTP 동사를 허용하는 규칙을 추가합니다(단, 이것만으로는 작동하지 않습니다).
- "모듈"로 이동한 후 "WebDAV 등록" 모듈을 선택하고 제거합니다.
- "Handler Mappings"로 이동한 다음 "WebDAV"를 선택하고 제거합니다.
- cmd에서 IISRESET 실행
WebDav를 사용할 수 없도록 하려면 ApplicationHost.config에서 다음 항목을 제거합니다.
<add name="WebDAVModule" />
항목은 모듈 섹션에 있습니다.
구성의 정확한 위치:
C:\Windows\System32\inetsrv\config\applicationHost.config
이것은 에서 저에게 잘 작동했습니다.Net Core 2.1
다음 행을 web.config 파일에 추가합니다.안 되겠군.
<?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에 표시되었습니다.
최신 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
'source' 카테고리의 다른 글
꺼내기 요청에서 수정된 파일 제거 (0) | 2023.07.01 |
---|---|
_id 필드가 없는 mongoexport (0) | 2023.07.01 |
설정된 시간(초)마다 코드를 실행하는 VBA Macro On Timer 스타일(예: 120초) (0) | 2023.07.01 |
data.frame 목록에서 개별 엑셀 워크시트 - R (0) | 2023.07.01 |
Oracle "ORA-01008: 일부 변수가 바인딩되지 않음" 오류(매개 변수 포함) (0) | 2023.07.01 |