Asp.Neturl書き換え後のページ再送アドレス変更の処理
9716 ワード
Url書き換えページでPostBackを行ってジャンプしない場合、URLがURL書き換え前の元のURLに戻るという体験はあまりよくありませんが、この場合は以下の方法で処理できます.
マイクロソフトのURLRewriterクラスライブラリに以下のクラスを追加してコンパイルし、そのUrlRewriterをプロジェクトで参照する.dllファイル
URLRewriterクラスライブラリコードはUrlRewriterダウンロード
そしてApp_Browsersフォルダの下にFormを作成する.browser
コードは次のとおりです.
htmlに書き換えた場合、本来のサイトのhtmlページは使用できなくなります
以上の方法ではこの問題は存在しません
まだできない場合はノードで追加できます
ノードの下に追加します(httpプロセッサで書き換えを実行していた場合は前に書いてください)
マイクロソフトのURLRewriterクラスライブラリに以下のクラスを追加してコンパイルし、そのUrlRewriterをプロジェクトで参照する.dllファイル
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// FormRewriter
/// </summary>
namespace URLRewriter
{
public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter
{
public FormRewriterControlAdapter()
{
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(new RewriteFormHtmlTextWriter(writer));
}
}
public class RewriteFormHtmlTextWriter : HtmlTextWriter
{
public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
: base(writer)
{
base.InnerWriter = writer.InnerWriter;
}
public RewriteFormHtmlTextWriter(System.IO.TextWriter writer)
: base(writer)
{
base.InnerWriter = writer;
}
public override void WriteAttribute(string name, string value, bool fEncode)
{
//If the attribute we are writing is the "action" attribute, and we are not on a sub-control,
//then replace the value to write with the raw URL of the request - which ensures that we'll
//preserve the PathInfo value on postback scenarios
if (name == "action")
{
HttpContext context = HttpContext.Current;
if (context.Items["ActionAlreadyWritten"] == null)
{
//We will use the Request.RawUrl property within ASP.NET to retrieve the origional
//URL before it was re-written.
value = context.Request.RawUrl;
//Indicate that we've already rewritten the <form>'s action attribute to prevent
//us from rewriting a sub-control under the <form> control
context.Items["ActionAlreadyWritten"] = true;
}
}
base.WriteAttribute(name, value, fEncode);
}
}
}
URLRewriterクラスライブラリコードはUrlRewriterダウンロード
そしてApp_Browsersフォルダの下にFormを作成する.browser
コードは次のとおりです.
<!--
<windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers
-->
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
adapterType="URLRewriter.FormRewriterControlAdapter" />
</controlAdapters>
</browser>
<browser id="NewBrowser" parentID="Mozilla">
<identification>
<userAgent match="Unique User Agent Regular Expression" />
</identification>
<capture>
<userAgent match="NewBrowser (?'version'\d+\.\d+)" />
</capture>
<capabilities>
<capability name="browser" value="My New Browser" />
<capability name="version" value="${version}" />
</capabilities>
</browser>
<browser refID="Mozilla">
<capabilities>
<capability name="xml" value="true" />
</capabilities>
</browser>
</browsers>
htmlに書き換えた場合、本来のサイトのhtmlページは使用できなくなります
以上の方法ではこの問題は存在しません
まだできない場合は