38

ASP.NETサーバー側は、独自のページへのポストバックを制御します。これにより、ユーザーを外部ページにリダイレクトしたいが、何らかの理由(認証など)でそのページに投稿する必要がある場合があります。

HttpWebRequestリダイレクトしたくない場合はうまく機能し、JavaScriptで問題ない場合もありますが、投稿用にデータをまとめるためにサーバー側のコードが本当に必要な場合は注意が必要です。

では、外部URLに投稿し、ASP.NETコードビハインドコードの結果にユーザーをリダイレクトするにはどうすればよいでしょうか。

4

6 に答える 6

15

これが私が今日この問題を解決した方法です。私はC#コーナーに関するこの記事から始めましたが、例は-技術的には健全ですが-少し不完全であることがわかりました。彼の言ったことはすべて正しかったのですが、私はいくつかの外部サイトにアクセスして、これをつなぎ合わせて、希望どおりに機能させる必要がありました。

ユーザーが技術的にフォームを送信していなかったのは役に立ちませんでした。彼らは私たちのサポートセンターに行くためにリンクをクリックしていましたが、httpにログインするには、サポートセンターのサイトに投稿する必要がありました。

このソリューションでは、を使用HttpContext.Current.Response.Write()してフォームのデータを書き込み、メソッドで少しJavascriptを使用して<body onload="">、フォームを適切なURLに送信します。

ユーザーが[サポートセンター]リンクをクリックすると、次のメソッドが呼び出されて応答が書き込まれ、ユーザーがリダイレクトされます。

public static void PassthroughAuthentication()
{

    System.Web.HttpContext.Current.Response.Write("<body 
    onload=document.forms[0].submit();window.location=\"Home.aspx\";>");

    System.Web.HttpContext.Current.Response.Write("<form name=\"Form\" 
    target=_blank method=post 
    action=\"https://external-url.com/security.asp\">");

    System.Web.HttpContext.Current.Response.Write(string.Format("<input 
       type=hidden name=\"cFName\" value=\"{0}\">", "Username"));

    System.Web.HttpContext.Current.Response.Write("</form>");
    System.Web.HttpContext.Current.Response.Write("</body>");
}

このメソッドの鍵は、Javascriptのonloadビットにあります。これは、ページの本文が読み込まれると、フォームを送信してから、ユーザーを自分のホームページにリダイレクトします。そのちょっとしたフードゥーの理由は、私が新しいウィンドウで外部サイトを立ち上げているが、ユーザーがページを更新した場合に非表示のフォームを再送信することを望まないためです。さらに、その隠されたフォームは、ページを数ピクセル押し下げて、私の神経質になりました。

私は誰もがこれについて持っているよりクリーンなアイデアに非常に興味があります。

エリック・シップル

于 2008-08-07T19:36:56.580 に答える
7

CodeProjectのこの例から始めました

次に、ページに追加する代わりに、saalon (上記) から借りて、Response.Write() を実行しました。

于 2010-01-21T19:23:51.363 に答える
5

HttpWebRequest クラスを使用して、コード ビハインドでフォーム ポストを行います。始めるのに適したヘルパー クラスを次に示します。

http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

そこから、Response.Redirect を実行するか、投稿の結果に基づいてアクションを変える必要があるかもしれません (エラーがあった場合は、ユーザーに表示するなど)。正直に言うと、質問にはすでに答えがあると思います-実際にはコードビハインドから両方を実行できるのに、投稿またはリダイレクトだと思っているようです。

于 2008-08-08T03:25:07.447 に答える
3

ASP.NET 2.0を使用している場合は、クロスページ投稿でこれを行うことができます。

編集:あなたが外部ページについて質問しているという事実を見逃しました。そのためには、ASP.NETページでHTMLフォームを生成し、そのアクションをリモートURLに設定し、メソッドをPOSTに設定する必要があると思います。(クロスページ投稿を使用すると、UIがなく、フォーム要素が非表示になっている別のページになることもあります。)次に、クライアントでポストバック結果を受信したらすぐにフォームを送信するためのJavaScriptを少し追加します。

于 2008-08-07T19:17:47.023 に答える
3

これを行うには、(JavaScriptを使用して)目的のリモートURLに自動投稿するフォームをレンダリングします。Webフォームのポストバックで投稿に必要な情報を収集し、リモート投稿フォームのHTMLを作成してレンダリングします。クライアントに。

このために、リモートURLとフォームの名前/値ペアのコレクションを含むユーティリティクラスを作成しました。

クロスページ投稿は、関連する両方のページを所有している場合は機能しますが、別のサイト(PayPalなど)に投稿する必要がある場合は機能しません。

于 2008-08-07T19:20:48.780 に答える