2017-12-20 27 views
0

ASP.NET 웹 API를 사용하고 .html (http://www.example.com/api/TestPlay/Main/Authenticate.html)을 가진 URL을 "TestPlay"라는 이름의 영역으로 라우팅하는 (http://www.example.com/api/TestPlay/Main/Authenticate) "MainController"라는 이름의 액션과 "Authenticate"라는 액션이 ​​있습니다. 그러나 내가 얻는 것은 404 찾을 수 없습니다.IIS가 .html을 제거하여 404 찾을 수 없음 다시 작성

URL 재 작성 모듈 2.1 및 다음 코드를 내 web.config에 설치했습니다. 내가해야 할 일이 더 있니?

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="Test Rewrite" stopProcessing="false"> 
       <match url="(.*)/api/TestPlay/(.*).html(.*)" /> 
       <action type="Rewrite" url="{R:1}/api/TestPlay/{R:2}" /> 
      </rule> 
     </rules> 
    </rewrite> 
    <handlers> 
     <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> 

답변

0

규칙의 정규 표현이 잘못되었습니다. 올바른 규칙은 다음과 같아야합니다

<rule name="Test Rewrite" stopProcessing="false"> 
    <match url="^api/TestPlay/(.*).html" /> 
    <action type="Rewrite" url="/api/TestPlay/{R:1}" /> 
</rule> 

것은 <match url="에서 정규 표현식은 슬래시를 시작하지 않고 요청 경로에 대한 정규 표현식해야하기 때문에. 예를 들어 귀하의 경우 URL 재 작성은이 문자열 과 정규식 ^api/TestPlay/(.*).html

을 비교합니다.