9

MVC4.0rcで.net4.5rcを使用しています

以下のコードはMVCwebapiアプリケーションから取得したものですが、通常のasp.netmvcでも同じ動作があります。

私のregisterroutesコードは次のようになります

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapHttpRoute(
                name: "R1",
                routeTemplate: "product/{id}",
                defaults: new { 
                                controller="Product",
                                id = RouteParameter.Optional 

                              }
            );

これは、ピリオドが含まれていないIDでうまく機能します。ただし、ピリオドが含まれている製品を要求すると、ASP.NETに呼び出しが届かないようです。

同様の投稿で提案されているように、以下の設定を使用すると、末尾がある場合に機能します/しかし、それなしでは機能しません

要約すれば

http://mysite.com/product/AZ0     //works
http://mysite.com/product/AZ.0/   //work with relaxedUrlToFileSystemMapping
http://mysite.com/product/AZ.0    //does not work

応答は404であり、これはASP.NETを使用せずにIISによって返されると思います。上記の最後のようなURLでroutedebuggerを実行すると、routedebuggerのものすら取得できません

IDにピリオドがあるかどうかに関係なく、mysite.com / product / {id}というパターンのURLがある場合に、IISが制御をASP.NETに渡すようにするにはどうすればよいですか。

ありがとう。

4

1 に答える 1

9

これに自分で答えさせてください。URL書き換えを追加すると、問題が解決します。以下のコードをweb.configに追加すると、URLが(product / 。 )の形式の場合、末尾に「/」を付けてUrlを書き換えるように指示されます。その後、ファイルとしては処理されず、通常のMVCとして処理されます。

  <system.webServer>
   ....   
    <rewrite>
      <rules>
        <rule name="Add trailing slash" stopProcessing="true">
          <match url="(product/.*\..*[^/])$" />
          <action type="Rewrite" url="{R:1}/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
于 2012-07-31T09:25:34.167 に答える