2012-02-17 16 views
15

soy bastante nuevo en MVC y enrutamiento y me pidieron que modificara una aplicación para usar diferentes direcciones URL. una tarea que está un poco sobre mí ya que no tengo experiencia.Enrutamiento ASP.NET MVC: agregue la extensión .html a las rutas

bien, vamos a hablar un poco de código:

routes.MapRoute(
"CategoryBySeName", // Route name 
"products/{SeName}", // URL with parameters 
new { controller = "Catalog", action = "CategoryBySeName" } 
); 

esto funciona como se esperaba, pero entonces el cliente quería ".html" al final de los caminos, y por eso cambió:

"products/{SeName}", // URL with parameters 

a:

"products/{SeName}.html", // URL with parameters 

que falle (IIS página 404 - MapRequestHandler) parece que IIS está tratando g para cargar un archivo físico con ese nombre en lugar de pasarlo a la aplicación.

similares: ASP.NET MVC Routing to start at html page (no contestado, y no duplicar)

+1

Conecte el depurador de rutas y vea lo que realmente está sucediendo. http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx –

Respuesta

3

Al cambiar el grupo de aplicaciones del clásico al integrado se solucionó el problema. gracias Guyz por su ayuda.

10

Eres supongo que un controlador de IIS es, probablemente, agarrando la solicitud antes de MVC es probablemente correcta.

Suponiendo IIS 7: http://technet.microsoft.com/en-us/library/cc770990(v=ws.10).aspx

Es necesario modificar el controlador de .html en IIS para utilizar ASP.NET.

Puede encontrarlo en las propiedades del sitio web en la pestaña del directorio de inicio en la configuración de la aplicación en la sección de asignaciones en II6.

Algo parecido a (la versión puede ser diferente): C: \ windows \ microsoft.net \ framework \ v4.0.30319 \ aspnet_isapi.dll es lo que necesita para manejar los archivos .html.

+2

'' agregó esto a mi web.config , el problema todavía existe – Dementic

+0

No estoy seguro de la posibilidad de hacer esto sin acceso a IIS. Mi comprensión (que puede ser incorrecta) es que IIS determina dónde enviar la solicitud en función de las asignaciones, y los controladores no pueden anular a otros controladores en circunstancias normales. –

+5

para cualquier persona que necesite arreglar esto en IIS Express también al depurar, encuentre el icono de IIS Express en la bandeja del sistema, "Mostrar todas las aplicaciones", seleccione su aplicación y haga clic en el enlace a la fuente de configuración, luego agregue una línea para "\ * .html "reflejando todas las líneas" \ *. cshtml "en los nodos de ubicación/system.webServer/handlers en la parte inferior. –

3

Simplemente agregue esta sección a Web.config, y todas las solicitudes a la ruta/{* pathInfo} serán manejadas por el controlador especificado, incluso cuando haya puntos en pathInfo. (Tomado de ServiceStack MVC ejemplo anfitrión Web.config y esta respuesta https://stackoverflow.com/a/12151501/801189)

<location path="route"> 
    <system.web> 
     <httpHandlers> 
     <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" /> 
     </httpHandlers> 
    </system.web> 
    <!-- Required for IIS 7.0 --> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true" /> 
     <validation validateIntegratedModeConfiguration="false" /> 
     <handlers> 
     <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
    </system.webServer> 
    </location> 
7

Hay que obligar a todas las solicitudes a través de la canalización de ASP.NET, y que puede hacer que añadiendo sólo que esta sola línea a la web. config de su aplicación:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
+0

Esto funcionó para mi aplicación ASP.Net MVC 4 ejecutándose en IIS Express – Jimbo

Cuestiones relacionadas