programing

ASP.NET 웹 API 애플리케이션이 IIS 7에 배포될 때 404를 제공함

starjava 2023. 8. 25. 23:10
반응형

ASP.NET 웹 API 애플리케이션이 IIS 7에 배포될 때 404를 제공함

ASP를 가지고 있습니다."에서 실행할 때 잘 작동하는 NET 웹 APIlocalhost:1783을 사용하는 IIS Express"

Settings in VS

하지만 "IIS Express 사용"을 선택 취소하고 "가상 디렉터리 만들기"를 누르면...

New settings

...404개의 오류가 발생했습니다.The 404 error

뭐가 잘못됐는지 짐작 가는 게 있나요?감사합니다!

web.config 파일에 추가해야 하는 것은 다음과 같습니다.

    <handlers>
      <!-- Your other remove tags-->
      <remove name="UrlRoutingModule-4.0"/>
      <!-- Your other add tags-->
      <add name="UrlRoutingModule-4.0" path="*" verb="*" type="System.Web.Routing.UrlRoutingModule" preCondition=""/>
    </handlers>

추가하기 전에 제거를 원하지만 이들 중 특정 순서가 있는 것은 없습니다.

Url Routing Module이 IIS의 웹 사이트 루트에만 적용되기 때문에 404가 표시됩니다.모듈을 이 응용 프로그램의 구성에 추가하면 모듈이 이 응용 프로그램의 경로(사용자의 하위 디렉터리 경로)에서 실행되고 라우팅 모듈이 시작됩니다.

나는을 가지고 만 아니라 그을가있것는외도에지고것▁for외도에것,▁to▁addition있▁having▁me▁in,.runAllManagedModulesForAllRequests="true"나는 또한 편집해야 했습니다."path"아래 속성.이전에 나의 경로 속성은"*."즉, 점 문자가 포함된 URL에서만 실행됩니다.하지만 제 앱의 URL에는 점이 없습니다.가 가내길바을때꿨을로 를 바꿨을 때."*"효과가 있었습니다.제가 지금 가지고 있는 것은 다음과 같습니다.

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

      <handlers>
          <remove name="WebDAV" />
          <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="*" 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="*" 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="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
  </system.webServer>

핫픽스 KB980368을 설치해야 할 수도 있습니다.

이 문서에서는 특정 IIS(인터넷 정보 서비스) 7.0 또는 IIS 7.5 처리기가 URL이 마침표로 끝나지 않는 요청을 처리할 수 있도록 하는 업데이트에 대해 설명합니다.특히 이러한 처리기는 "." 요청 경로에 매핑됩니다. 현재 "." 요청 경로에 매핑된 처리기는 URL이 마침표로 끝나는 요청만 처리합니다.예를 들어 처리기는 다음 URL과 유사한 URL의 요청만 처리합니다.

http://www.example.com/ExampleSite/ExampleFile .

이 업데이트를 적용한 후 "*." 요청 경로에 매핑된 처리기는 URL이 마침표로 끝나는 요청과 URL이 마침표로 끝나지 않는 요청을 처리할 수 있습니다.예를 들어 핸들러는 이제 다음 URL과 유사한 요청을 처리할 수 있습니다.

http://www.example.com/ExampleSite/ExampleFile

http://www.example.com/ExampleSite/ExampleFile .

이 패치가 적용되면 ASP.NET 4 응용 프로그램은 확장자 없는 URL에 대한 요청을 처리할 수 있습니다.따라서 처리기 실행 전에 실행되는 관리되는 HttpModules가 실행됩니다.경우에 따라 HttpModules가 확장이 없는 URL에 대한 오류를 반환할 수 있습니다.예를 들어 .aspx 요청만 예상하도록 작성된 HttpModule은 HttpContext에 액세스하려고 할 때 오류를 반환할 수 있습니다.세션 속성.

이 문제는 다음과 같은 이유로도 발생할 수 있습니다.

1. 웹에서.구성

<system.webServer>
     <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer>

2. 웹 API가 배포된 서버의 bin 폴더에서 다음을 사용할 수 있는지 확인합니다.

•시스템.넷.Http

•시스템.넷. http.서식 지정

•시스템.웹.Http.웹 호스트

•시스템.웹.Http

웹 API 패키지가 개발 컴퓨터의 Nuget을 통해 설치되어 있기 때문에 Visual Studio를 통해 게시되는 경우 이러한 어셈블리는 기본적으로 bin 폴더에 복사되지 않습니다.Visual Studio 게시의 일부로 이러한 파일을 사용하려면 이러한 어셈블리에 대해 CopyLocal을 True로 설정해야 합니다.

runAllManagedModulesForAllRequests="true"를 실행하면 성능 문제와 MVC 라우팅 문제가 발생한다고 말하는 사람도 있습니다.다음을 사용할 것을 제안합니다.

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html

http://bartwullems.blogspot.com/2012/06/optimize-performance-of-your-web.html

저는 이 문제를 해결하기 위해 며칠 동안 온갖 방법을 동원해 왔습니다.제 개발 기계는 잘 작동했지만, 제가 배치한 새로운 기계는 404 오류를 일으켰습니다.

IIS 관리자에서 저는 두 기계의 핸들러 매핑을 비교하여 많은 핸들러가 누락되었음을 깨달았습니다.그 ASP가 밝혀졌습니다.Net 5가 컴퓨터에 설치되지 않았습니다.

저에게 이 문제는 옵션에 대한 404개만 받았기 때문에 다른 답변과 약간 달랐지만, 통합 확장 없는 URL 핸들러 옵션에 명시된 옵션이 이미 있었습니다.정말 헷갈리네요.

  1. 다른 사람들이 말했듯이, 모듈 노드에서 모든 관리되는 모듈 실행="true"는 대부분의 웹 API 404 문제를 포괄적으로 해결할 수 있는 쉬운 방법이지만, 훨씬 덜 거슬리는 @DavidAndroidDev의 답변을 선호합니다.하지만 제 경우에는 추가적인 것이 있었습니다.
  2. 안타깝게도 IIS에서 사이트의 Request Filtering 아래에 이 설정이 있습니다.

OPTIONS Issue with Request Filtering

web.config에 다음 보안 노드를 추가하여 전체 시스템을 제거해야 했습니다.컨텍스트에 포함된 웹 서버:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <remove name="WebDAV" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <security>
      <requestFiltering>
        <verbs>
          <remove verb="OPTIONS" />
        </verbs>
      </requestFiltering>
    </security>
  </system.webServer>

비록 이 질문에 대한 완벽한 답은 아니지만, "에 대한 첫 번째 결과입니다.IIS OPTIONS 404"가 구글에 있으니, 이것이 누군가에게 도움이 되길 바랍니다. 오늘 저는 한 시간을 들였습니다.

저는 Blazor와 이 문제를 겪었습니다.NetCore는 NavManager "baseUrl"을 컨트롤러 호출에 통합하면 가상 디렉터리 또는 루트 웹 사이트 사용에 관계없이 문제가 해결된다는 것을 알게 되었습니다.

나한테 효과가 있었어요!

string baseUrl = NavigationManager.BaseUri.ToString();

NavigationManager.NavigateTo(**baseUrl** + $"api/Download/DownloadFile?FileName=" 
                                         + sFilename, true);

Visual Studio 2012를 사용 중인 경우 Microsoft에서 최근에 출시한 업데이트 2를 다운로드하여 설치합니다(2013년 4월 기준).

비주얼 스튜디오 2012 업데이트 2

해당 업데이트에는 이 문제와 관련된 몇 가지 버그 수정 사항이 있습니다.

저도 같은 문제가 있었습니다. 많은 연구개발을 통해 문제를 발견했습니다.

하지만 당신의 구성이 정확하다는 것은 aspnet 64비트와 IIS가 잘 된다는 것을 의미하는 한, 내가 본 유일한 문제는 당신이 그것을 갈망할 필요가 있도록 하는 "로컬 방향 경로를 취하는 웹 API" 경로입니다. 이렇게 하는 것입니다.~../../../api/제품/

문제를 게시해 주셔서 대단히 감사합니다.구성 파일에 있는 많은 abti 및 기타 설정을 linered했습니다.

IIS Express를 사용하는 응용 프로그램을 실행하는 동안 웹 사이트에서 IIS Express를 사용하지 않음(로컬 IIS 사용) 404 오류가 발생했습니다.IIS Express를 실행하는 데 사용된 브라우저를 닫으면 404가 사라집니다.저는 IIS Express 프로젝트를 로컬 IIS 서비스로 호출하여 IIS Express 프로젝트를 로컬 IIS를 사용하도록 변환한 후 모든 것이 작동했습니다.비 IIS Express 및 로컬 IIS 웹 사이트를 동시에 실행할 수 없는 것 같습니다.

다음 설정이 모두 작동하고 마침내 저장된 후 일주일을 꼬박 보내십시오.IIS의 ISAPI 파일러에서 UrlScan을 제거하면 이 문제가 해결됩니다.

언급URL : https://stackoverflow.com/questions/15389855/asp-net-web-api-application-gives-404-when-deployed-at-iis-7

반응형