1

以下は、Asp.net mvc コードです。

        public void Index()
        {
            Response.Write("Hey");
            Response.Redirect("https://www.google.com");
        }

 OR

 public void Index()
        {
            Response.Redirect("https://www.google.com");
            Response.Write("Hey");
        }

ここでは、リダイレクトは機能していますが、Write() は機能していません。リダイレクトが優先されるのはなぜですか? http応答でなぜ302で、なぜ200ではないのかを意味します。

注: これは、リアルタイムのシナリオに対処するためのものではありません。理由や根底にある行動を知りたいという好奇心を持ってください。

4

3 に答える 3

2

Respose.Write は機能していますが、リダイレクトを実行すると、サーバーはヘッダーを含む応答を送信します。

HTTP/1.1 302 オブジェクトが移動しました

サーバー: Microsoft-IIS/5.0

場所: どこか/newlocation.aspx

次に、ブラウザーは別の要求 (リダイレクトをサポートしていると仮定) を開始して、そのコンテンツをブラウザーにロードします。

とにかく、応答ストリームがバッファリングされている場合 ("Hey")、この応答を Response.Redirect で上書きしています。

于 2013-04-09T06:50:21.360 に答える
0

ここでは Redirect を優先せず、同じ関数で Responce.Write と Responce.Redirect の両方を呼び出してから、ページを書き込んだ後、指定された URL に直接リダイレクトします。

于 2013-04-09T06:50:33.320 に答える
0

このようなことをする必要がある実際のシナリオがあった場合は、分離コード/コントローラーで Response.Write を実行し (WebForms を使用しているか MVC を使用しているかによって異なります)、リダイレクト ヘッダーをHTML ページの本文:

コントローラ:

public void Index()
{
    Response.Write("Hey");
}    

HTML:

<%
//response would show here
%>
<head>
    <meta http-equiv="refresh" content="10; url=https://www.google.com" />
</head>
于 2013-04-09T07:15:25.757 に答える