質問

.NET 3.5アプリを作成し、 URI.IsWellFormedUriString(string uriString、UriKind uriKind)を使用してユーザーが入力したURIを検証しています。 UriKind.Absolute を使用します。私はアプリケーションで遊んでいたので、次のような理由について少し心配して混乱しています:

http:// ddd

は有効なURIですか?何が得られますか? RFCの一部であるためだとわかっていますが、そもそもなぜ有効なのですか?

そのようなURIを目にしたのは、企業の内部イントラネットの場合だけです

http:// companyinet

または

http:// localhost (これは非常に人気がありますが、特殊なケースでもあります)

さまざまなURI正規表現があるため、独自の正規表現を使用する必要はありません。ただし、一般にアクセスできないようなURIをユーザーが入力することは望ましくありません。

アイデアや考えはありますか?ありがとう。

役に立ちましたか?

解決

それは、あなたが言うように、それが完全に有効なURIだからです。

戦略を少し変更します...有効な(整形式の)URIだけでなく、実際にサイトを指しているという意味で有効なURIが必要な場合は、もう1つステップを追加します。

文字列検証の後、HEADリクエストを発行してURLをpingします。 2xyステータスコードが返される場合は、おそらく大丈夫です。これはほとんどの状況で機能しますが、警告や例外がないわけではありません。

他のヒント

は一意のリソースを指すため、有効です。この場合、ローカルネットワーク上のコンピューター「ddd」のWebサーバーを(できれば)指します。

URIは、一意のWorld Wide Webリソース識別子ではなく、一意のリソース識別子です。 file:///blah.txtも有効なURIです

RFC 1738 RFC 2396 )。

RFCは、スキームとスキーム固有の要素(この場合はホスト名)のみで構成されるリソースパスに対して特定の許可を与えます。一意のリソースを識別し、URIの構文に準拠している限り、有効です。

質問に自分で答えました。これは「有効」ですRFC仕様の定義ipso factoによる(整形式)URI。

必要なタスクを解決するには、正規表現で1つ以上のドットの追加チェックを行うか(ドットをエスケープすることを忘れないでください!)、リソース自体をヒットして、実際に応答するかどうかを確認してください。

URIの構文に従うため、有効なURIです:スキームと、スキーム固有のコンポーネント(「http」がスキーム」、「:」が2つを分離、「// ddd」がスキーム固有の部分。)

HTTP URIの場合、「ddd」が有効なホスト名であるため、それらの構文にも従います。

URIの構文は、 http://www.ietf.org/rfc/で定義されています。 rfc2396.txt

このURLが有効である理由を確認する簡単な実験を次に示します。

0) dig または ping ユーティリティを使用して、google.comのIPアドレスを取得します。私は得た:74.125.53.100

1)/ etc / hostsファイルを編集します(Windowsでは、C:\ Windows \ system32 \ drivers \ etc \ hostsのようなもので、作成する必要がある場合があります)。 hostsファイルに、次のような行を追加します。

74.125.53.100 ddd

編集を保存することを忘れないでください。

2)Webブラウザーで、次のURLにアクセスします。 http:// ddd

3)URLを使用してGoogleにアクセスしました。それが有効なURLである理由です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top