7

estoy usando .net4.5rc con MVC4.0rcasp.net mvc no recibe la solicitud GET con un período en el que

El código siguiente es tomado de una aplicación MVC WebAPI pero es el mismo comportamiento allí para asp.net mvc reular

Mi código RegisterRoutes se parece a esto

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

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

           } 
      ); 

esto funciona bien con IDS que no tienen un período en ellos. Sin embargo, cuando solicito un producto con un período, la llamada no parece llegar a ASP.NET

cuando uso la configuración a continuación como se sugiere en publicaciones similares, funciona cuando hay un final/ Pero no funciona sin él

en resumen

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

La respuesta es 404 y supongo que lo que se devuelve por IIS sin la participación de ASP.NET. Cuando corro routedebugger con una URL como la última vez anterior, ni siquiera conseguir las cosas routedebugger

¿Cómo hago IIS para pasar el control a ASP.NET cuando hay una URL con un patrón: mysite.com/product/{id} independientemente de si hay un período en la identificación o no.

gracias.

Respuesta

7

Déjame responder esto yo mismo. Agregar una reescritura de URL resuelve el problema. El siguiente código agregado a web.config le dice que reescriba la URL con un "/" posterior si la URL es del formulario (producto/.) Luego ya no se maneja como un archivo sino que se maneja como MVC regular.

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