2010年7月29日(木曜日)
URLに%22が含まれても何とかする方法
公開: 2010年7月31日12時25分頃
URLに%22が含まれると例外が出る問題ですが、この解決方法だとリダイレクトが重複してスマートでないのはもちろんのこと、いったん例外が出た後でエラー画面からリダイレクトするという方法であるため、例外が出ること自体は避けられていません。そのため、イベントログに例外の記録が残ってしまいます。
というわけで、もっとスマートな方法を模索してみました。
URLに %22 が含まれるときの例外は HttpApplication が出しているのですが、HttpApplication の説明にはこうありまして……。
HttpApplication クラスのインスタンスは、開発者が直接作成するのではなく、ASP.NET インフラストラクチャで作成されます。
そもそも自由にインスタンスを作ったりできないので、カスタマイズした別のクラスのインスタンスに差し替えたりすることはできなさそうです。しかしよく説明を読むと、カスタムHttpModuleを作成してイベントを受け取ることができるようなことが書かれています。
というわけで、早速実行してみました。こんな感じの簡単なコードを書いて……。
namespace Bakera.Hatomaru { public class HatomaruUrlCheckModule : IHttpModule { public HatomaruUrlCheckModule(){} public void Init(HttpApplication app) { app.BeginRequest += new EventHandler(app_BeginRequest); } public void app_BeginRequest (object o, EventArgs ea) { HttpApplication httpApp = (HttpApplication)o; // URLを見て変な文字があったらリダイレクトする処理 // リダイレクトする場合は httpApp.CompleteRequest(); を呼ぶ } public void Dispose(){} } }
web.config側にはこんな設定を追加。
<httpModules> <add type="Bakera.Hatomaru.HatomaruUrlCheckModule" name="HatomaruUrlCheckModule" /> </httpModules>
これで例外を出さずにリダイレクトできるようになりました。
やってみればけっこう柔軟に対応できるものですね。
- 「URLに%22が含まれても何とかする方法」にコメントを書く
- 前(古い): 2010年7月28日(Wednesday)のえび日記
- 次(新しい): 2010年8月1日(Sunday)のえび日記