3

まず、これは以前に尋ねるべきだったようですが、私の質問に答えるものは何も見つかりません。

私のタスクの基本的な概要は、ユーザー定義の Web アドレスに基づく Web ページにアンカー リンクをレンダリングすることです。アドレスはユーザー定義であるため、次のような任意の形式にすることができます。

この値を使用して行う必要があるhrefのは、アンカー タグのプロパティとして設定することです。問題は、(少なくとも Chrome では) 最初の 2 つの例だけが絶対 URL パスとして認識されるため、機能することです。最後の 2 つの例は、同じドメインにリダイレクトします (つまり、相対パスとして扱われます)。

したがって、最終的な質問は次のとおりです。これらの値をフォーマットして、一貫した絶対パスが使用されるようにする最善の方法は何ですか? http/https をチェックして、欠落している場合は追加できますが、より信頼性の高い、すぐに使用できる .Net クラスがあることを期待していました。

さらに、これはユーザー定義の値であるため、とにかく完全にジャンクである可能性があるため、URL を検証する関数も素晴らしいボーナスになります。

4

2 に答える 2

1

数か月前にこの問題に遭遇したため、URL が絶対的なものであることを保証する一貫した方法が必要でした。http(s)://また、Web ページに URL を表示するために削除する方法も必要でした。

私はこの機能を思いつきました:

public static string FormatUrl(string Url, bool IncludeHttp = null)
{

    Url = Url.ToLower();

    switch (IncludeHttp) {
        case true:
            if (!(Url.StartsWith("http://") || Url.StartsWith("https://")))
                Url = "http://" + Url;
            break;
        case false:
            if (Url.StartsWith("http://"))
                Url = Url.Remove(0, "http://".Length);
            if (Url.StartsWith("https://"))
                Url = Url.Remove(0, "https://".Length);
            break;
    }

    return Url;

}

あなたが「すぐに使える」ライブラリを求めていることは知っていますが、これは役立つかもしれません。

「すぐに使える」ソリューションの問題は、関数が URL がhttp://https://. 私の関数では になると仮定しましたhttp://が、一部の URL ではhttps://. マイクロソフトがこのようなものをフレームワークに組み込むとしたら、最初からバグがあります。

于 2012-04-18T10:13:01.693 に答える
0

Uri クラスのこのオーバーロードを使用して試すことができます。

Uri コンストラクター (文字列)

このコンストラクターは、URI 文字列から Uri インスタンスを作成します。URI を解析し、正規の形式に変換し、必要なエスケープ エンコーディングを作成します。

このコンストラクターは、Uri がアクセス可能なリソースを参照していることを保証しません。

このコンストラクターは、文字列パラメーターが絶対 URI を参照することを想定しており、UriKind を Absolute に設定して Uri コンストラクターを呼び出すことと同等です。コンストラクターに渡された文字列パラメーターが相対 URI である場合、このコンストラクターは UriFormatException をスローします。

これにより、ユーザー入力から正規の Uri を構築しようとします。また、必要な URL 部分をチェックして抽出するための多くのプロパティがあります。

于 2012-04-18T10:14:51.447 に答える