51 votes

Comment supprimer l'extension ".svc" dans un service RESTful WCF ?

A ma connaissance, le RESTful WCF a toujours ".svc" dans son URL.

Par exemple, si l'interface de service est du type

[OperationContract]
[WebGet(UriTemplate = "/Value/{value}")]
string GetDataStr(string value);

L'URI d'accès est comme "http://machinename/Service.svc/Value/2". D'après ce que j'ai compris, une partie de l'avantage de REST est qu'il peut cacher les détails de la mise en œuvre. Un URI RESTful comme "http://machinename/Service/value/2" peut être mis en œuvre par n'importe quel cadre RESTful, mais un "http://machinename/Service.svc/value/2" expose sa mise en œuvre est WCF.

Comment puis-je supprimer cet hôte ".svc" dans l'URI d'accès ?

47voto

Thiago Silva Points 985

Je sais que cet article date un peu, mais si vous utilisez .NET 4, vous devriez envisager d'utiliser le routage des URL (introduit dans MVC, mais intégré dans ASP.NET de base).

Dans votre application de démarrage (global.asax), il suffit d'avoir la ligne de configuration de route suivante pour configurer la route par défaut :

RouteTable.Routes.Add(new ServiceRoute("mysvc", new WebServiceHostFactory(), typeof(MyServiceClass)));

alors vos URLs ressembleront à ceci :

http://servername/mysvc/value/2

HTH

30voto

Darin Dimitrov Points 528142

Dans IIS 7, vous pouvez utiliser l'option Module de réécriture d'URL comme expliqué dans ce blog poste .

Dans IIS 6, vous pouviez écrire un module http qui va réécrire l'url :

public class RestModule : IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication app)
    {
        app.BeginRequest += delegate
        {
            HttpContext ctx = HttpContext.Current;
            string path = ctx.Request.AppRelativeCurrentExecutionFilePath;

            int i = path.IndexOf('/', 2);
            if (i > 0)
            {
                string svc = path.Substring(0, i) + ".svc";
                string rest = path.Substring(i, path.Length - i);
                ctx.RewritePath(svc, rest, ctx.Request.QueryString.ToString(), false);
            }
        };
    }
}

Et il y a une belle exemple comment réaliser des urls sans extension dans IIS 6 sans utiliser de modules ISAPI tiers ou de mappage de caractères génériques.

4voto

Rick Strahl Points 4166

Voici des informations plus détaillées sur l'utilisation du module de réécriture IIS 7 ou d'un module personnalisé : http://www.west-wind.com/Weblog/posts/570695.aspx

3voto

Jason Kresowaty Points 8053

Il existe également un moyen d'éliminer complètement les fichiers .svc physiques. Cela peut être fait avec un VirtualPathProvider .

Voir : http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/350f2cb6-febd-4978-ae65-f79735d412db

2voto

Eran Kampf Points 3285

C'est facile sur IIS 7 - utilisez un Module de réécriture d'URL

Sur IIS 6, j'ai trouvé que le plus simple était d'utiliser la fonction Module de réécriture ISAPI qui vous permet de définir un ensemble d'expressions régulières qui font correspondre les Urls des requêtes au fichier .svc...

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