🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

URL

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

3067閲覧

C#でのURLの部分取得方法

退会済みユーザー

退会済みユーザー

総合スコア0

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

URL

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/22 14:16

編集2021/03/23 06:37

前提・実現したいこと

URLのコンテキストパス部分を取得したいです。
IISでアプリケーションを構成したhttp://xxxx/yyyy/zzzz/というURLの
yyyy部分(ディレクトリ名(エイリアス名?)に当たる部分)までの取得を行いたいです。

最終的な目的としては、プロトコル部分からディレクトリ名までのURL、http://xxxx/yyyyまでの動的な取得になります。

javascriptもしくはC#のコードで取得するにはどのようにすればよいでしょうか・・・? 

発生している問題・エラーメッセージ

どうしてもディレクトリ名前後のURL部分がくっついて取得されてしまい、詰まっています。。。

該当のソースコード

試したこと

javascriptのlocationオブジェクトで試していましたが、成功せず…。
C#のHttpRequestMessageクラスを試してみたりしました。

補足情報(FW/ツールのバージョンなど)

すみません、プログラミング自体が半年程度の初心者になります。。。
語彙等も拙く、明確な説明が出来ていませんが、よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/03/22 21:44

目的は何ですか? それによって答えが変わってくると思います。
dodox86

2021/03/23 01:34 編集

URL(URI)そのものに関して、「コンテキストパス(context path)」と言う用語は無いはずです。(詳しくは「RFC」と言うもので規定されているので、「URL RFC」などでWEBを検索してみると良いかもです)なので、こと、C#/.NET FrameworkでURLだけを見た場合、「URLからコンテキストパスを取り出す」ようなものは無いはずです。何らかのWEBアプリ上(Javaサーブレットとか)での話を想定しているのかもしれませんが、そういったフレームワーク上で動くものであれば、そのフレームワークで提供されている機能として「コンテキストパスだけを取り出す」ようなものがある可能性があります。Javaサーブレットで言うgetContextPathメソッドのようなものです。 そうでなければ、自力でURL中のPATHの'/'で区切った先頭要素を「コンテキストパス」と見なすよう、自力で取り出す必要があります。 ですので、そういった前提条件をもっと明確にしましょう。JavaScriptは通常、フロント(ブラウザ側)で動作するものなので、事情は同様だと思います。
退会済みユーザー

退会済みユーザー

2021/03/23 01:31

ありがとうございます。 何を最終的にやりたいかと言いますと、ホスト部分からコンテキストパス部分までのURLを取得したいということになります。(サーブレットパス以下を落としたいです。)
退会済みユーザー

退会済みユーザー

2021/03/23 03:51 編集

ここのコメントは回答欄に移しました。
退会済みユーザー

退会済みユーザー

2021/03/23 06:35

語彙に関して、誤った使用をしており申し訳ありませんでした。 IISでアプリケーションを構成していて、http://[サーバー名]/[ディレクトリ名(エイリアス?)]/[パス名称]とURLが構成されている感じです。 この中で、http://[サーバー名]/[ディレクトリ名(エイリアス?)]までを動的に取得したい(パス部分を落としたい)です。
退会済みユーザー

退会済みユーザー

2021/03/23 07:12

すでに回答済みですので、回答のコメント欄にフィードバックいただくようお願いします。 ASP.NET の話であれば、ASP.NET のタグをつけていただくようお願いします。
退会済みユーザー

退会済みユーザー

2021/03/24 07:07

質問者さん、無言になってしまいましたが、このレッドの課題が解決したのであればクローズ願います。解決してなくて回答に対する質問などがあれば回答のコメント欄に書いてください。何にせよ無言で放置は NG です。
退会済みユーザー

退会済みユーザー

2021/04/06 12:00

質問者さん、無言になってしまいましたが、このレッドの課題が解決したのであればクローズ願います。解決してなくて回答に対する質問などがあれば回答のコメント欄に書いてください。何にせよ無言で放置は NG です。
guest

回答1

0

コンテキストパスというと、Web サーバーのあるサイト下にある Web アプリケーションの名前(IIS で言うとエイリアス)という特別な意味を持つと想像してますが、そういうことには一切関係なく、例えば http://xxxx/yyyy/zzzz/ という文字列が渡されたら単純に yyyy 部分を取得できれば良いのですか?

であれば、正規表現を使うとか、以下のようにプリミティブに / でスプリットするとかで容易にできるはずです。

string url = "http://xxxx/yyyy/zzzz/"; string[] array = url.Split(new char[] { '/' }); Console.WriteLine(array[3]); // yyyy

質問者さんが言うコンテキストパスという定義に上に書いたような特別な意味があるとすると、Web サーバー側でなければ分かりません。dodox86 さんが質問に対するコメントで言われているように getContextPathメソッドを使うとか、ASP.NET であれば ~ 演算子を使うという手がありますが、いずれもサーバー側でないと何ともならないと思います。

投稿2021/03/23 03:51

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dodox86

2021/03/23 23:53

>@質問者TMiyaさん SurferOnWwwさんの本回答をいただいてから「質問への追記・修正、ベストアンサー選択の依頼」欄にて[2021/03/23 15:35]にコメントをしていることから、回答の本意やこれまでのコメントの意味をまだ充分に理解されていないかもしれないと思ったのでコメントします。URLについて、コンテキストパス相当の部分をそのWEBアプリ本来の意味で認識しているのはそのWEBアプリを動かしているサーバー(アプリケーションサーバー)だけです。クライアント側(C#のオリジナルのプログラムであるとか、ブラウザベースで動くHTML中のJavaScript部分であるとか)が単独で正確なコンテキストパスを認識することは不可能です。クライアント側で処理を完結させたいのであれば、そのWEBのシステムを使う範囲において、URL中の「ここから~ここまで」のようなかんじでコンテキストパスを決め打ちで取り出すしか方法はありません。SurferOnWwwさんが本回答でC#のコードで例示してくださっているものがそのひとつです。あとは、(馬鹿馬鹿しいですが)、サーバー側が返すHTTPレスポンス中にコンテキストパスを示す文字列を追加情報として含めるように作る、などですかね。それらを踏まえた上で解決する必要があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問