7

Używam .net4.5rc z MVC4.0rcasp.net mvc nie otrzyma żądanie GET z okresu to

Poniższy kod jest pobierana z aplikacji WebAPI MVC ale samo zachowanie jest tam reular asp.net mvc

Mój kod RegisterRoutes wygląda to

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

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

           } 
      ); 

działa to dobrze z identyfikatorami, które nie mają okres w nich. Jednak gdy pytam o produkt z okresem w nim, wywołanie nie wydaje się, aby uzyskać ASP.NET

kiedy używam poniższego ustawienia sugerowanego na podobne posty działa, gdy jest trailing/ Ale to nie działa bez niego

w podsumowaniu

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

odpowiedź jest 404 i myślę, że to jest zwracany przez IIS bez angażowania ASP.NET. Kiedy biegnę routedebugger z URL podobny ostatni powyżej, ja nawet nie dostać rzeczy routedebugger

Jak zrobić IIS przekazać kontrolę do ASP.NET, gdy istnieje URL z wzorem: mysite.com/product/{id} niezależnie od tego, czy istnieje okres w id, czy nie.

dzięki.

Odpowiedz

7

Pozwól mi odpowiedzieć sam. Dodanie URL Rewrite rozwiązuje problem. Poniższy kod dodany do pliku web.config nakazuje przepisanie adresu URL z końcowym "/", jeśli URL ma postać (produkt/.) Następnie nie jest już traktowany jako plik, lecz traktowany jak zwykły 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>