33 votes

Comment remplacer un fichier .svc dans ma table de routage?

J'ai cette URL qui a été utilisé à partir de certains JSON post de retour à partir du site principal:

http://site/Services/api.svc/UpdateItem

Nous sommes dans le processus de mise à jour du site web lentement à ASP.Net MVC 2 et ne veulent pas briser l'URL courante dans le système. (JavaScript problèmes d'actualisation)

J'ai supprimé le /Services/api.svc et ont déplacé la logique de cet appel d'API dans le Contrôleur suivant:

http://site/LegacyApi/UpdateItem

Malheureusement, lors de l'ajout de la route, je n'arrive pas à l'obtenir pour remplacer l'api.svc et obtiens une erreur 404.

Itinéraire:

    routes.MapRoute(
        "UpdateItemApi",
        "Services/api.svc/UpdateItem",
        new { controller = "LegacyApi", action = "UpdateItem" }
    );

Selon la MSDN sur cette question spécifique, le service de routage doit passer par.

Toute aide est grandement appréciée.


Mise à jour

Routage pour la norme .pages aspx fonctionne comme prévu, il semble donc que quelque chose de particulier avec le .svc fichiers et la façon dont ils sont traités.

39voto

Haacked Points 31070

Le problème que vous rencontrez est dû à un fournisseur de version enregistré pour les fichiers .svc. Ce fournisseur de génération est enregistré par le fichier web.config au niveau de l'ordinateur par défaut.

Pour que le routage fonctionne dans ce cas, vous devez supprimer le fournisseur de génération dans le fichier web.config de votre application. L'extrait suivant montre comment supprimer l'extension .svc de la liste des fournisseurs de génération.

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

4voto

Tom Anderson Points 7228

En utilisant les réécritures d'URL, j'ai pu faire ce que ce lien suggérait , seulement à l'envers:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X