2011-04-20 13 views
5

Estoy en blanco y necesito una mano rápida. Google me ha fallado. Estoy trabajando en la sustitución de WCF/REST Starter Kit con ASP.NET MVC. Quiero hacer la transición lo más fácil posible, así que estoy tratando de crear una ruta para que coincida con la siguiente URL:ASP.NET MVC 2 Problema: punto en la ruta

http://localhost/services/MyService.svc/UserInfo 

creé la ruta en Global.asax.cs:

routes.MapRoute(
      "MyServiceDefault", 
      "services/MyService.svc/{action}/{id}", 
      new { 
        controller = "MyService", 
        action = "UserInfo", 
        id = UrlParameter.Optional 
       } 
     ); 

Pronto me di cuenta de que la solicitud ni siquiera llega a mi aplicación debido al . en la parte MyService.svc de la URL.

¿Qué me está faltando para forzar la solicitud para pasar a mi aplicación en lugar de ser manejado por el servidor como un recurso estático?

actualización

me olvidó mencionar que también he intentado añadir lo siguiente a Web.config en vano:

<httpRuntime relaxedUrlToFileSystemMapping="true" /> 

Respuesta

5

Resulta que la búsqueda de la combinación correcta de términos finalmente dará resultados. Phil Haack en realidad tiene un puesto de bloques sobre este problema exacto:

Overriding a .svc Request With Routing

Resulta que para la extensión * .svc, simplemente añadiendo a la <httpRuntime relaxedUrlToFileSystemMapping="true" /> Web.config no es suficiente.

En uno de los archivos de marco Web.config, hay un proveedor de compilación asociado con el * .svc que asume la solicitud antes de que llegue a .NET MVC (y falla ya que este no es realmente un servicio WCF) . Una vez que lo sepa, es bastante fácil eliminar el proveedor de compilación en Web.config de su aplicación:

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
    <buildProviders> 
     <remove extension=".svc"/>    
    </buildProviders> 
    ... 
</system.web> 
+0

interesante. Tomaré nota de esto. –

0

Tome un vistazo a la propiedad RouteCollection.RouteExistingFiles. Por defecto, esto se establece en falso. Podría ser que su servicio esté ubicado debajo de la ruta Servicios en su proyecto y esto está causando el problema.

+0

Aunque no tengo una carpeta de Servicios, le di una oportunidad de todos modos. Sin suerte. Mi aplicación todavía no maneja la ruta. –

0

Este article le informa cómo puede usar diferentes extensiones con la aplicación asp.net mvc y aún así hacerlas enrutar a .NET framework. específicamente preste atención a la parte que comienza con

This is done using a script named registermvc.wsf.