質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

8436閲覧

ASP.NETにてパラメーター付きでリダイレクトしたい

Zodiarc

総合スコア19

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2019/01/08 02:33

編集2019/01/08 02:35

こんにちは
webアプリケーション開発者です。

現在開発しているシステムのSEO対応にて
アクセス箇所の分析を調査しようとしております。
その際に一つのページに飛ぶ際に、どこから飛んできたかURLにパラメーターを設定しているのですが
そのページがリダイレクトを行い違うページに飛んだ際にパラメーターを消してしまっています。
パラメーターを消さずにリダイレクトする方法はありますでしょうか?

HttpResponsのRedirectメソッドにてRequestのURLから抜き出し付加後リダイレクトすればよいのですが
あまり綺麗な方法とは言えず、もっとスマートな方法はありますでしょうか

----詳細----
【現状】
AというページからBに飛んでリダイレクトでCに行く
http://testA.aspx (飛ぶ)→ http://testB.aspx?we=A (リダイレクト)→ http://testC.aspx

【理想】
http://testA.aspx (飛ぶ)→ http://testB.aspx?we=A (リダイレクト)→ http://testC.aspx?we=A

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/08 03:24

「どこから飛んできたか」は要求ヘッダに含まれる Referer で分かると思うのですが、それが使えない理由があれば教えてください。
Zodiarc

2019/01/08 03:53

詳しい経緯までは把握しておりませんが ブラウザやセキュリティソフトによっては取得できないこともあるため使用しておりません
退会済みユーザー

退会済みユーザー

2019/01/08 04:25

ユーザー側で意図的にリファラを隠すようなことがなくて、「ブラウザやセキュリティソフトによっては取得できないこともある」というケースがあるなら具体的に教えていただきたいぐらいですが・・・とりあえずそれは置いといて、質問にある(飛ぶ)というのは具体的にどうしているのですか? testA.aspx ページ内に <a href="http://testB.aspx?we=A" ... >xxx</a> と設定してあって、それをユーザーがクリック? で、その要求を受けた IIS は testB.aspx ロードし、クエリ文字列に we=A があると自動的に testC.aspx にリダイレクト? そのときリダイレクト先の URL にクエリ文字列 we=A を付ければ【理想】になるのですか?
Zodiarc

2019/01/08 04:29

すいません・・・そこまで詳しいことはわかりません ご説明の通りです。 それが理想となります。
退会済みユーザー

退会済みユーザー

2019/01/08 04:47

そうすると、自分も質問者さんが言われる「あまり綺麗な方法とは言えず」という方法、即ち、testB.aspx 内のコードで we=A を取得して Response.Redirect("~/testC.aspx?we=A") とすることしか思いつきません。お役に立てずすみませんが、他の方の回答をお待ちください。
Zodiarc

2019/01/08 05:10

そうですよね・・・お時間をいただきありがとうございました。 もう少し粘ってみて無理そうであればその方法でやってしまいます
Kaiser

2019/01/12 02:12

横から失礼します。 Referer等のHttpHeaderというか、HttpRequest自体が容易に改ざん可能です。 通常のユーザーが、行うことはまずないと思いますが。。。 私の経験上、Webサーバーに到達するまでの間の、ロードバランサーやファイヤーウォールで HttpHeaderを変更しているケースがありました。 その際、ネットワークの担当者に確認したところ、なんでもできる(Requestも変えれる)よ。とのことでした。 Refererが変更のターゲットになることは、まずないと思いますが。。。
guest

回答1

0

ベストアンサー

スマートな方法は無さそうですね。背中を押すという意味でも回答します。

多少スマートになるのでは?という提案です。
パラメータを全て再取得して、QueryStringの形式に変換する共通メソッドを作ってはいかがでしょうか?
パラメータは、「HttpRequest.QueryString」に配列形式ですべて入っています。
配列形式を文字列形式に変換するようなイメージです。
そうすると、下記がスマートになります。
・パラメータを指定して再取得という行為が不要
・パラメータの数も気にしなくて済む
・他のページでも利用できる

コードイメージは、このような形。
手元にVisualStjioが無いため、エラーが出ると思いますがご容赦ください。

C#

1public static string getQueryStrings(QueryString querystring) 2{ 3 StringBilder sb = new StringBilder("?") 4 5 // QueryStringからパラメータ値を取得 6 foreach(String paramName in querystring) 7 { 8 sb.Append(paramName + "=" + QueryString[paramName]); 9 sb.Append("&"); 10 } 11 12 //末尾の&を削除 13 sb.Remove(-1); 14 return sb.toString(); 15}

参考
https://docs.microsoft.com/ja-jp/dotnet/api/system.web.httprequest.querystring?view=netframework-4.7.2

投稿2019/01/12 02:06

Kaiser

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問