5

処理が完了すると、処理の進行状況に基づいて成功またはエラーのページにリダイレクトされる .ashx ハンドラーがあります。ハンドラーは私のサイトにありますが、成功ページまたはエラー ページはそうではない可能性があります (これはユーザーが構成できるものです)。

エラーの詳細をクエリ文字列に入れずにエラー ページに渡す方法はありますか?

私はもう試した:

  1. エラーの詳細を含むカスタム ヘッダーを追加しますが、を使用しているResponse.Redirectため、ヘッダーがクリアされます
  2. Server.Transferの代わりに,を使用Response.Redirectしますが、これは自分のサイトにない URL では機能しません

クエリ文字列でデータを渡すことができることはわかっていますが、渡す必要があるデータがクエリ文字列に対して長すぎる場合があります。他に選択肢はありますか?

4

4 に答える 4

2

基本的に、いいえ。GET リクエスト (リダイレクト) で追加データを渡す唯一の方法は、クエリ文字列で渡すことです。

重要なことは、これは WebForms の制限ではなく、HTTP が機能する方法であるということです。サイト外の別のページにリダイレクトする場合 (したがって、Cookie/セッション データのオプションがない場合)、リクエストで直接情報を送信する必要があります。つまり、クエリ文字列を使用することになります。

Server.TransferやのようなものResponse.Redirectは、単純な HTTP リクエストの単なる抽象化です。フレームワークの機能は、HTTP の実際の動作に逆らうことはできません。

もちろん、クエリ文字列に何を渡すかについてはあらゆる種類のオプションがありますが、何かを渡す必要があります。本当に URL を短縮したい場合は、エラー コードを渡して、受信ページがさらに情報を取得できるようにする API を公開することができます。

  1. トランザクション情報 (または詳細なエラー メッセージ) を ID 付きのデータベースに保存します。
  2. クエリ文字列で ID を渡します。
  3. Web メソッドまたは同様の API を公開して、受信ページが追加情報を要求できるようにします。

フォーム ポスト外のリダイレクトでデータを渡すような錯覚を作成するハックな方法はたくさんあります(フォームと Javascript を含むページを返して、すぐにクロスドメイン フォーム ポストを実行するなど)。ただし、クエリ文字列は適切です。 GET リクエストでデータを渡す方法を知っているのに、なぜそれを回避しようとするのでしょうか?

于 2014-03-27T21:42:11.753 に答える
2

リダイレクトを実行する必要がある場合は、クエリ文字列で何らかの情報を渡す必要がありますこれがブラウザのリダイレクトの仕組みですただし、それを渡す方法については創造的になることができます。

  1. エラー コードを渡し、消費するシステムにさまざまなエラー コードの意味を認識させることができます。
  2. トークンを渡すことができ、消費システムに、指定されたトークンのエラー情報について裏でシステムに問い合わせる方法を知ってもらうことができます。

また、実際にリダイレクトを実行しているかどうかに柔軟性がある場合は、最初に AJAX リクエストを使用し、ブラウザの JavaScript が解釈して POST パラメータなどを介して送信できる何らかの種類の JSON オブジェクトを送り返すことができます。 .

于 2014-03-27T21:37:50.007 に答える
1

基本的に、HTTP でデータを送信するには、GET と POST の 2 つの通常の方法があります。追加のパラメーターを使用して別の URL にリダイレクトする場合は、クライアント ブラウザーが GET 要求をターゲット サーバーに送信するようにします。技術的には、サーバーは特定の HTTP エラー コード 307 + 移動先の URL (GET パラメーターを含む) でブラウザーに応答します。または、ターゲット URL に対して POST リクエストを送信する必要がある場合もあります。その場合、特定の値が事前に入力されたいくつかの非表示フィールドで構成される単純な HTML フォームで応答する必要があります。フォームのアクションはターゲット URL を指し、メソッドは「POST」である必要があります。もちろん、HTML には javascript が含まれている必要があります。これにより、ドキュメントが読み込まれるとフォームが自動的に送信されます。このようにして、クライアント ブラウザは GET リクエストではなく POST リクエストを送信します。

于 2014-03-27T21:49:44.700 に答える