c# - maproute - ¿Cómo puedo anular un archivo.svc en mi tabla de enrutamiento?
routeconfig c# (2)
Al utilizar las reescrituras de URL, pude hacer lo que sugería este enlace , solo al revés:
<system.webServer>
<rewrite>
<rules>
<rule name="LegacyApiService" stopProcessing="true">
<match url="^Services/api.svc/(.*)$" />
<action type="Rewrite" url="LegacyApi/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
Tengo esta URL que fue utilizada desde alguna publicación JSON desde el sitio web principal:
http://site/Services/api.svc/UpdateItem
Estamos en el proceso de actualizar el sitio web lentamente a ASP.Net MVC 2 y no queremos romper ninguna URL actual en el sistema. (Problemas de actualización de JavaScript)
He eliminado /Services/api.svc y he movido la lógica de esta llamada API al siguiente Controlador:
http://site/LegacyApi/UpdateItem
Desafortunadamente, al agregar la ruta, parece que no puede sobrescribir el api.svc y sigue apareciendo un error 404.
Ruta:
routes.MapRoute(
"UpdateItemApi",
"Services/api.svc/UpdateItem",
new { controller = "LegacyApi", action = "UpdateItem" }
);
De acuerdo con MSDN en este tema específico , la ruta debe seguir adelante.
Cualquier ayuda sobre esto es muy apreciada.
Actualizar
El enrutamiento para páginas .aspx estándar funciona como se esperaba, por lo que parece ser algo perticular con los archivos .svc y cómo se manejan.
El problema al que se está enfrentando se debe a un proveedor de compilación que está registrado para archivos .svc. Este proveedor de compilación está registrado por el archivo web.config a nivel de máquina predeterminado.
Para que el enrutamiento funcione en este caso, deberá eliminar el proveedor de compilación en el archivo web.config de su aplicación. El siguiente fragmento muestra cómo eliminar la extensión .svc de la lista de proveedores de compilación.
<system.web>
<compilation debug="true" targetFramework="4.0">
<buildProviders>
<remove extension=".svc"/>
</buildProviders>
...