2017-12-20 22 views
0

ASP.NET Web APIを使用していて、 "TestPlay"という名前のエリアにルーティングされていないURL(.html(http://www.example.com/api/TestPlay/Main/Authenticate.html)をhttp://www.example.com/api/TestPlay/Main/Authenticate) 「MainController」という名前のアクションと「Authenticate」という名前のアクションです。しかし、私が得ているのは404 Not Foundです。IISが.htmlを削除して404が見つかりませんでした。

web.configにURL書き換えモジュール2.1と以下のコードをインストールしました。私は何かすべきことはありますか?

<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/Main/Authenticate.htmlと正規表現^api/TestPlay/(.*).html

と比較します
関連する問題