7

Ich verwende .net4.5rc mit MVC4.0rcasp.net Mvc nicht empfängt die GET-Anforderung mit einem Punkt darin

Der folgende Code wird aus einer MVC WebAPI Anwendung genommen, aber ich das gleiche Verhalten ist dort für reular asp.net Mvc

sieht Mein registerroutes Code wie diese

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

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

           } 
      ); 

Das funktioniert gut mit Ids, die keine Zeit in ihnen haben. Wenn ich jedoch nach einem Produkt mit einem bestimmten Zeitraum frage, scheint der Anruf nicht zu ASP.NET

zu gelangen, wenn ich die Einstellung unten verwende, wie es auf ähnlichen Posts vorgeschlagen wird, funktioniert es, wenn es einen nachfolgenden/ But it gibt ohne es nicht

Gesamt

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

Die Antwort ist 404 zu arbeiten, und ich denke, das von IIS zurückgegeben wird ASP.NET ohne Beteiligung. Wenn ich routedebugger mit einer URL wie die letzten oben laufen, ich habe nicht einmal die routedebugger Sachen

Wie kann ich IIS, um die Kontrolle zu ASP.NET zu übergeben, wenn es eine URL mit einem Muster ist: mysite.com/product/{id} unabhängig davon, ob eine Periode in der ID vorhanden ist oder nicht.

danke.

Antwort

7

Lassen Sie mich das selbst beantworten. Hinzufügen einer URL Rewrite löst das Problem. Der unten in der web.config hinzugefügte Code besagt, dass die Url mit einem abschließenden "/" überschrieben wird, wenn die URL die Form hat (product/.) Dann wird sie nicht mehr als Datei behandelt, sondern als normale MVC behandelt.

<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>