クエリ文字列なしでURLを取得


189

次のようなURLがあります。

http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye

私はそれから得たいですhttp://www.example.com/mypage.aspx

どうすれば入手できますか?

回答:


129

使用できます System.Uri

Uri url = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = String.Format("{0}{1}{2}{3}", url.Scheme, 
    Uri.SchemeDelimiter, url.Authority, url.AbsolutePath);

またはあなたが使うことができます substring

string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));

編集:brillyfreshの提案をコメントに反映するように最初のソリューションを変更します。


6
url.AbsolutePathは、URLのパス部分(/mypage.aspx)のみを返します。url.Scheme(http)+ Uri.SchemeDelimiter(://)+ url.Authority(www.somesite.com)を、必要な完全なURLに追加
Ryan

20
Uri.GetLeftPart方法は、上述したように簡単であるstackoverflow.com/questions/1188096/...
エドワードワイルド

substring何のクエリ文字列がありません場合の方法は、エラーが発生します。string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);代わりに使用してください。
ストーマ

378

これはより簡単な解決策です:

var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);

ここから借用:クエリ文字列を切り捨て、クリーンなURLを返すC#ASP.net


17
1行バージョン:return Request.Url.GetLeftPart(UriPartial.Path);
jp2code

uri.GetComponent(Uriの一部を取得するためのもう1つの素晴らしい方法です。今までこの2つを知りませんでした!
AaronLS 2017年

38

これは私の解決策です:

Request.Url.AbsoluteUri.Replace(Request.Url.Query, String.Empty);

35
Request.RawUrl.Split(new[] {'?'})[0];

2
これは、完全なURIなしで使用できるという事実だけが好きです。
KingOfHypocrites 2015年

URLが書き換えられる前に URL RawUrlを取得することに注意してください。 AbsoluteUriRequest.Url.AbsoluteUri.Split('?')[0]
プロテクター1


16

私のやり方:

new UriBuilder(url) { Query = string.Empty }.ToString()

または

new UriBuilder(url) { Query = string.Empty }.Uri

メソッドがないため、これは私がNET Core 1.0プロジェクトに使用するものUri.GetLeftPartです。NET Coreの最新バージョン(1.1)にはその方法が必要です(現時点ではネットコア1.1を使用していないので確認できません)
psulek 2017年

1
URIの構築がUriBuilderの目的とまったく同じであるため、私はこれが好きです。他のすべての答えは(良い)ハックです。
ナインテールズ2017

11

を使用Request.Url.AbsolutePathして、ページ名を取得Request.Url.Authorityし、ホスト名とポートを取得できます。私はあなたが望むものをあなたに正確に与えるための組み込みのプロパティがあるとは思いませんが、あなたはそれらを自分で組み合わせることができます。


1
それは私に/mypage.aspxを与えていますが、私が望んでいたものではありません。
ロッキーシン

4

Split()バリエーション

参考のためにこのバリエーションを追加したいだけです。URLは文字列であることが多いため、Split()メソッドを使用する方がよりも簡単ですUri.GetLeftPart()。またSplit()、Uriが例外をスローするのに対して、相対値、空の値、およびnull値を処理するようにすることもできます。さらに、URLには/report.pdf#page=10(特定のページでPDFを開く)などのハッシュが含まれる場合もあります。

次のメソッドは、これらすべてのタイプのURLを扱います。

   var path = (url ?? "").Split('?', '#')[0];

出力例:


1
私は自分の意見が出るまで賛成票が出ていないことにかなりショックを受けています。これは素晴らしいソリューションです。
ジェイソン

3

@Kolmanの回答を使用した拡張メソッドを次に示します。GetLeftPartよりもPath()を使用するほうが覚えやすいでしょう。少なくともC#に拡張プロパティを追加するまで、Pathの名前をGetPathに変更することをお勧めします。

使用法:

Uri uri = new Uri("http://www.somewhere.com?param1=foo&param2=bar");
string path = uri.Path();

クラス:

using System;

namespace YourProject.Extensions
{
    public static class UriExtensions
    {
        public static string Path(this Uri uri)
        {
            if (uri == null)
            {
                throw new ArgumentNullException("uri");
            }
            return uri.GetLeftPart(UriPartial.Path);
        }
    }
}

1
    string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
    string path = url.split('?')[0];


0

Silverlightのソリューション:

string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);

0

他のいくつかの回答では、QueryString最初に次のものがない場合にnull例外をスローしたため、簡単な拡張機能を作成しました。

public static string TrimQueryString(this string source)
{ 
    if (string.IsNullOrEmpty(source))
            return source;

    var hasQueryString = source.IndexOf('?') != -1;

    if (!hasQueryString)
        return source;

    var result = source.Substring(0, source.IndexOf('?'));

    return result;
}

使用法:

var url = Request.Url?.AbsoluteUri.TrimQueryString() 

0

System.Uri.GetComponents、必要なコンポーネントのみを指定します。

Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);

出力:

http://www.example.com/mypage.aspx

-1

簡単な例は次のような部分文字列を使用することです:

string your_url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path_you_want = your_url .Substring(0, your_url .IndexOf("?"));



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.