IIS7からURL Rewrite Module をインストールすることにより、URLの書き換えが簡単に行えますが、FormのActionは自分で書き換えないと、Postback後は書き換え前のURLになってしまいます。
下記のブログの「Handling ASP.NET PostBacks with URL Rewriting」にあるサンプルをダウンロードして、「App_Browsers」フォルダと「App_Code」フォルダにファイルをコピーすれば、ServerVariables["HTTP_X_ORIGINAL_URL"]に入っている値にAction もは書き換わります。
※「Form.browser」と「FormRewrite.vb」をコピーすれば動きます。
ScottGu's Blog Tip/Trick: Url Rewriting with ASP.NET
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
上記を知らずに、別の方法で今まで対応していたので、それもメモ。
1.HtmlTextWriter を継承したクラスを作成し、action 部分を変更可能にします。
public class HtmlTextRewriter : HtmlTextWriter
{
public string action {get; set;}
public HtmlTextRewriter(TextWriter writer) : base(writer)
{
this.InnerWriter = writer;
}
public HtmlTextRewriter(TextWriter writer, string tabString)
: base(writer, tabString)
{
this.InnerWriter = writer;
}
public override void WriteAttribute(string name, string value, bool fEncode)
{
if (name == "action")
{
HttpContext Context = HttpContext.Current;
value = Context.Request.RawUrl;
}
base.WriteAttribute(name, value, fEncode);
}
}
2.System.Web.UI.Pageを継承したクラスを作成します。Render をオーバーライドし、1で作成したクラスを使用して、actionを変更します。
public class RewriteActionPage : System.Web.UI.Page
{
protected override void Render(HtmlTextWriter writer)
{
HtmlTextRewriter rewriter = new HtmlTextRewriter(writer);
rewriter.action = Request.ServerVariables["HTTP_X_ORIGINAL_URL"];
base.Render(rewriter);
}
}
3.書き換えたいページで上記クラスを継承します。
public partial class test : RewriteActionPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
}