2009-05-12 7 views
3

Lorsque j'essaye de réécrire une URL dans ASP.NET, je constate que l'URL change dans le navigateur de l'utilisateur. J'utilise les services REST WCF et je souhaite changer la façon dont vous accédez aux URL. Voir l'exemple de code ci-dessous.ASP.NET RewritePath ne fonctionne pas comme prévu/URL dans le navigateur

J'ai un HttpModule qui intercepte des demandes.

public class FormatModule : IHttpModule 
{ 
    #region IHttpModule Members 

    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 

    public void Init(HttpApplication application) 
    { 
     application.BeginRequest += new EventHandler(application_BeginRequest); 
    } 

    void application_BeginRequest(object sender, EventArgs e) 
    { 
     HttpContext context = HttpContext.Current; 
     if (context.Request.RawUrl.Contains(".pox")) 
      context.RewritePath("~/Lab1Service.svc?format=pox", false); 
     else if (context.Request.RawUrl.Contains(".json")) 
      context.RewritePath("~/Lab1Service.svc?format=json", false); 
    } 

    #endregion 
} 

Le problème se produit lorsque les utilisateurs visitent l'URL dans leur navigateur.

http://localhost/Lab1Service.svc.pox, à la place l'URL change dans le navigateur pour http://localhost/Lab1Service.svc?format=pox.

Répondre

2

Je résolus cela. Il semble que si vous n'incluez pas la barre oblique inverse à la fin de l'extension .svc, l'URL REDIRECTS au lieu de REWRITING.

Ce fut mon original

context.RewritePath("~/Lab1Service.svc?format=pox", false);

Ceci est la version corrigée (notez la barre oblique après la .svc)

context.RewritePath("~/Lab1Service.svc/?format=pox", false);
+0

c'est bizarre .. vous devez avoir enregistré un autre gestionnaire/module, whis fait cette redirection .. –

+7

C'est en fait une barre oblique. – StriplingWarrior

0

J'utilise dans mon rewriter meodule un autre contexte, peut-être le problème est dans ce

public void Init(HttpApplication context){application = context;} 

HttpApplication contexte et initialise puis récrire chemin

application.Context.RewritePath(rewritedUrl, Config.RebasePath); 
+0

Cela n'a toujours pas fonctionné, qu'est-ce qui me manque? –

3

Il est plus probable que le pipeline IIS est pas le routage tout URL via le pipeline ASP.NET Il voit donc l'extension .pox ou .svc et la transmet simplement via des gestionnaires de fichiers statiques et génériques. Votre "correctif" cache réellement l'extension, donc il est routé à travers le pipeline .NET complet.

Questions connexes