どのようにResponse.AddHeader(、「秒」「リフレッシュ」)と404エラーを取得しないでServer.Transferを()を作るには?
-
20-09-2019 - |
質問
ので、これはシナリオです:
私は、すべてのログイン制御のページの基本クラスを持っています:
public class SessionControlledPage : Page
{
protected virtual void Page_Load(Object sender, EventArgs e)
{
Response.AddHeader("Refresh", Convert.ToString(Session.Timeout * 60 + 5));
if (Session.IsNewSession)
{
Response.Redirect("~/login.aspx");
}
}
}
そして基本クラスからinherints regularpage.aspx
ページ:
public partial class RegularPage : SessionControlledPage
{
override protected void Page_Load(Object sender, EventArgs e)
{
base.Page_Load(sender, e);
Server.Transfer("~/otherpage.aspx");
}
}
//localhost/regularpage.aspx とそのSession.Timeout = 5
:今度は、元のURLが HTTPだったとしましょう。転送が行われた後、リフレッシュが発生したときに問題が表示されます。私は404 Not Found
エラーと HTTPのURLの変更を取得しています:// localhost /を305 に。その5 * 60 + 5 = 305
に注意してください。
あなたは知っていますか?解決策を得たか。
PD:私はotherpage.aspxにregularpage.aspxのいくつかのプロパティにアクセスする必要があるので、私は多分あなたも、このための別の解決策を提供することができ、転送を使用する
。解決
あなたがやろうとしているすべては、その後、Server.Transferをを呼び出している場合base.Page_Loadを呼び出すための非常に少ない理由があります。正確に何を達成しようとしているの?あなただけのいくつかのプロパティにアクセスしている場合は、Pageオブジェクトに依存しない、いくつかのビジネス・ロジックにこの抽象化する必要があります。
このは、これを実現するために... 404問題を引き起こしているものもあり、問題は(それをチェックアウト)ページのレンダリングされた出力でなければなりません。あなたは右のメタリフレッシュタグの後に1ページを遮断し、新しいページを開始し、ASP.NETがちょうど同じ応答ストリームにそれをすべてダンプされているように思えます。要するに、あなたはそれが間違ってやっています。 :)あなたは、うまく配置されResponse.Clear()でこの問題を解決することができるかもしれないが、それはここでの本当の問題はありません...そして、あなたのリフレッシュタグを失うと思います。