Pergunta

Eu estou escrevendo um aplicativo .NET 3.5 e usando URI.IsWellFormedUriString(string uriString, UriKind uriKind) para verificar URIs digitada pelo usuário; usando UriKind.Absolute. Eu estava apenas brincando com a aplicação e estou um pouco preocupado e confuso sobre o porquê algo como:

http: // ddd

é um URI válido? O que da? Eu sei que é porque é parte do RFC, mas por que é válido em primeiro lugar?

A única vez que eu já vi URIs como essa é para, Intranets internos corporativos como

http: // companyinet

ou

http: // localhost (que é muito popular, mas também um caso especial)

Eu não quero ter que usar minha própria expressão regular como há tantas regexs URI variados. No entanto, eu realmente não quero que os usuários entrar URIs como essa que não são de acesso público.

Qualquer idéia ou pensamentos? Obrigado.

Foi útil?

Solução

Isso é porque é um URI perfeitamente válido, como você menciona.

Eu alterar a sua estratégia um pouco ... Se você quiser URIs que não são válidos apenas (como no bem-formado), mas também válido, no sentido de que eles realmente apontam para um site, você terá que adicionar mais um passo.

Após a validação corda, emitir um pedido HEAD para ping o URL. Se ele retorna um código de status 2xy, provavelmente você está bom para ir. Isto irá funcionar na maioria das situações, mas não é sem ressalvas e exceções.

Outras dicas

é válido porque ele faz apontam para um recurso único. Neste caso, ele aponta para o servidor web (espero) do computador 'ddd' na rede local.

URI é o identificador único recurso, não é exclusivo ampla identificador de recursos web mundo. file: ///blah.txt também é um URI válido

Porque ele está em conformidade com RFC 1738 (bem como a especificação URI do RFC 2396 ).

O RFC faz concessões específicas para caminhos de recursos que consistem apenas de um esquema e um elemento específico esquema - neste caso, um nome de host. Contanto que identifica um dos recursos únicos e está em conformidade com a sintaxe de URI é válido.

Você respondeu a pergunta a si mesmo. É um "válido" (bem-formado) URI por definição do RFC especificação ipso facto.

Para ajudar a resolver a sua tarefa necessário, fazer algumas verificações de adição em seu regex para o um ou mais pontos (não se esqueça de escapar deles!) Ou, eventualmente, tentar acertar o recurso em si para ver se ele realmente responde.

É um URI válido porque segue a sintaxe de URI: tem um esquema, e um componente específico do sistema ( 'http' ser o esquema', ':' separando os dois, e '// ddd' é a parte específica do esquema.)

No caso de um URI HTTP, também segue a sintaxe para aqueles com 'ddd' ser um nome de host válido.

A sintaxe de URI é definido na http://www.ietf.org/rfc/ rfc2396.txt

Aqui está um experimento simples para ver por que URL é válido:

0) usar o utilitário dig ou ping para obter o endereço IP do google.com. Eu tenho: 74.125.53.100

1) Editar seu arquivo / etc / hosts (no Windows é algo como C: \ WINDOWS \ system32 \ drivers \ etc \ hosts, e talvez seja necessário criá-lo). Em seu arquivo hosts, adicione uma linha como esta:

74.125.53.100 ddd

Não se esqueça de salvar suas edições.

2) Em um navegador da Web, vá a este URL: http: // ddd

3) Você só acessada Google usando o URL. É por isso que é uma URL válida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top