2009-05-12 2 views
3

ASP.NETでURLを書き直そうとすると、ユーザーのブラウザでURLが変更されていることがわかります。私はWCF RESTサービスを使用しており、URLにアクセスする方法を変更したいと考えています。以下のコード例を参照してください。ASP.NET RewritePathが期待通りに動作しない/ブラウザのURLが変更される

私はリクエストをインターセプトするHttpModuleを持っています。

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 
} 

問題は、ユーザーがブラウザのURLにアクセスしたときに発生します。

http://localhost/Lab1Service.svc.poxの代わりに、ブラウザのURLがhttp://localhost/Lab1Service.svc?format=poxに変更されます。この

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

はのHttpApplicationコンテキスト初期化した後、パス

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

答えて

2

私はこれを解決書き換えるに私は私のリライターのmeoduleに別のコンテキストを使用してい

+0

それは変です..他のハンドラ/モジュールを登録している必要があります。whisはそのリダイレクトを行っています。 –

+7

これは実際にはスラッシュです。 – StriplingWarrior

0

は、多分問題があります。 .svc拡張子の後ろにバックスラッシュを含めないと、URLはREWRITINGではなくREDIRECTSになります。

これはこれはIISパイプラインはすべてをルーティングされていない可能性が高いかもしれ修正版(.SVCの後にスラッシュを注意してください)

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

これはまだ動作しませんでしたが、何が欠けていますか? –

3

である私の元

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

ましたASP.NETパイプライン経由のURL。したがって、.poxまたは.svc拡張子が表示され、一般的な静的ファイルハンドラに渡されます。

あなたの「修正」は実際に拡張子を隠すので、完全な.NETパイプラインを経由してルーティングされます。

関連する問題