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)
    {

    }
}

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading