2009-06-26 9 views
1

私はASP.Net MVCに精通していないと言いましょう。私はこのプロジェクトがおなじみになり、切り替える時間はないと思います。すべてのasp.netリクエストを1ページに強制しますか?

物理ページが1つしかないウェブサイト、mysite.com/default.aspxを構築しています。ユーザーがmysite.com/foo/barを参照すると、私は(何とか)自分のdefault.aspxにそのリクエストを処理させたいと思う。私はそれが非常に "ルート"/"コントローラ"指向のように聞こえることを知っている...しかし、MVCに全豚を切り替えることなくこれを行ういくつかの方法はありますか?

また、サイトには静的な画像や、私のページに表示されたくないものがあることにも注意してください...結果的にmysite.com/foo/barのhtmlには、 imgタグにmysite.com/images/foo.gifのsrcがあるので、特定のフォルダ/ファイル/その他のものが処理されないようにする必要があります。

答えて

4

あなたが話しているのはURLリライティングと呼ばれ、はい、ASP.Netフォームアプリケーションが可能です。

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

をHTTPを使用して、ワイルドカードマッピングを実装する必要がありますIIS 6には存在しないファイル上で動作するように書き換えてできるようにするには:このエントリは、ここではかなりよく技法を説明するようです。この記事は、まだ関連しているあなたはASP.Net MVCを使用していないにもかかわらずので、ASP.Net MVCは、この同じ問題に獲物落ちる:

http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

スクロール見出しまで:「IIS6拡張レスのURL "

IISプロパティウィンドウに移動する方法を理解する必要がある場合は、表示されるコンテキストを少し上にスクロールします。 .mvc拡張機能に関する部分は無視してください。

+0

これは機能していますが、物理的に存在しないファイルの要求を受け取るモジュールは、どのように取得すればよいですか? – Jonas

+0

IISでこの設定がありますが、ASP.Net ISAPI dllですべての要求を処理する必要があるため、速度が低下すると考えられます。私はこれを一瞬のうちに歩みながら自分の投稿を編集します。 –

0

404のリクエストをすべてあなたのウェブサイトにリダイレクトするようにIISを設定することができます。私が正しく覚えていれば、IIS 6にはバグがあります(実行している場合)。これは200のステータスコードを返し、通常の処理を可能にします。

そうしないと、web.configのタグを使ってリダイレクトを処理できますが、404エラーコードが返される可能性があります。

希望に役立ちます!

0

私はIIS7には、何かの作業を持っていると思う...しかし、一種の脆いようだ:このようなセットアップ、私はHttpModuleをしてい

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="ScriptModule" /> 
    <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add name="MyRewriteModule" preCondition="managedHandler" type="MyWeb.MyRewriteModule, MyWeb" /> 
</modules> 

と、次のように私のモジュールは、コードを持っています:

void context_BeginRequest(object sender, EventArgs e) 
{ 
    HttpApplication app = (HttpApplication)sender; 
    HttpRequest request = app.Context.Request; 
    List<string> ignoreExtensions = new List<string>() { "axd", "gif", "ico" }; 
    if(ignoreExtensions.TrueForAll(s => !request.FilePath.ToLower().EndsWith(s))) 
    app.Context.RewritePath("~/default.aspx", request.Path, request.QueryString.ToString(), true); 
} 

明らかに私はそのリストをキャッシュして拡張しますが、全体的にはうまくいくようです。誰も明白な欠点を指摘できますか?

0

404エラーページを変更してdefault.aspxにリダイレクトするだけです。

関連する問題