2012-04-18 7 views
3

にWebアドレスを変換すると、まず、これは前に依頼されているべきもののように思えるが、私は私の質問に答える何かを見つけることができません。有効なhrefの値

私の仕事の基本的な概要は、ユーザー定義のWebアドレスに基づいてWebページ上のアンカーリンクをレンダリングすることです。アドレスはユーザー定義されているように、これは例えば、任意のフォーマットであることができます

は私が必要なものこの値をアンカータグのhrefプロパティとして設定することです。さて、問題は、(少なくともChromeでは)絶対URLパスとして認識されているため、最初の2つの例だけが動作することです。最後の2つの例は、(すなわち、相対パスとして扱われる)同じドメインに

をリダイレクトするだから最終的な質問は:一貫した絶対パスが使用されていることを確認するために、これらの値をフォーマットするための最良の方法は何か?私はhttp/httpsをチェックして欠けている場合は追加することができましたが、より信頼性の高い.Netクラスのボックスがあることを期待していました。これは、ユーザー定義の値であるとして、URLを検証するための機能があまりにも素敵なボーナスになるので、それはとにかく完全ジャンク可能性がさらに

、。

答えて

1

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

私はこの機能を思い付いた:

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://が必要です。 Microsoftがこのようなものをフレームワークに組み込むと、最初からバグが発生します。

+0

最初の 'if'で論理ORの代わりにビット単位ORを使用する理由はありますか?相違点の説明については、[この回答](http://stackoverflow.com/questions/7331686/why-and-not/7331721#7331721)を参照してください。 –

+0

@DanielHilgarth答えを更新しました。元のスクリプトはVB.NETで書かれていたので、私はOPのためにC#でそれを投稿しましたが、それを逃しました。 – Curt

+0

提案をお寄せいただきありがとうございます。私は手動実装を選択する必要があるかもしれませんが(少なくとも今のところ)、 'https'の部分は私の問題ではありません。これらのタイプのサイトについては、私はユーザーに明示的にhttpsの部分を含めると期待しています – musefan

0

あなたはウリクラスのこのオーバーロードを使用して試すことができます:

Uri Constructor (String)

このコンストラクタは、URI文字列からUriインスタンスを作成します。 URIを解析し、標準形式でそれを置き、必要なエスケープエンコーディングを行います。

このコンストラクタは、URIがアクセスできるリソースを参照していることを保証するものではありません。

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

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

+0

提案していただきありがとうございますが、これを試した後は最初の2つの例でのみ動作します。最後の2つの例で例外がスローされます。だから、これは私の必要性のためにはうまくいかないでしょう – musefan

+0

そして、両方の答えの組み合わせを試してみてください。もう一つの答えで、あなたはhttpを持つことの必要条件を満たします。 2番目の方法では、残りのURLが正しいことを確認します。ユーザーの入力を確認してhttp(s)を含めるように強制できますか? – JotaBe

+0

私は、入力時に有効なURLを強制することができますが、とにかく使用する前にチェックをしたいと思います(確かに)。私は今のところカスタム関数を試して、それがどうなるかを見てみよう。 – musefan

関連する問題