どのようにResponse.AddHeader(、「秒」「リフレッシュ」)と404エラーを取得しないでServer.Transferを()を作るには?

StackOverflow https://stackoverflow.com/questions/2456243

質問

ので、これはシナリオです:

私は、すべてのログイン制御のページの基本クラスを持っています:

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()でこの問題を解決することができるかもしれないが、それはここでの本当の問題はありません...そして、あなたのリフレッシュタグを失うと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top