我想从简单的DNS字符串中获取正确的方案。我怎么能在C#中做到这一点?
示例:
我有这个:google.com
我希望得到这个:https://www.google.com
但是其他一些网站:msn.com
我希望得到这个:http://www.msn.com
答案 0 :(得分:0)
除非您拥有常用主机名及其协议的数据库,否则无法执行此操作。 URL具有协议,主机和路径。例如。 http://google.com/
告诉你它的协议是http
,它的主机是google.com
,路径是/
。
http有非标准惯例,即www www.x.com
表示http://www.x.com/
而{1999} x.com
表示http://x.com/
(但不是http://wwww.x.com/
所以它需要DNS条目。)
使用此逻辑google.com
变为http://google.com/
,msn.com
变为http://msn.com/
。
通常主机会将您重定向到标准使用的内容。例如。在挪威http://google.com/
将我重定向到https://www.google.no/
,但您不能从google.com
假设https://www.google.no/
。
我不是C#程序员所以这是一个C#兼容的Algol,可能需要一些惯用的修饰:
using System.Text.RegularExpressions;
using System;
class URLTest
{
// Return true on any string that starts with alphanumeric
// chars before ://.
// hasProto("telnet://x.com") => true
// hasProto("x.com/test") => false
static bool hasProto(String url)
{
return Regex.IsMatch(url, "^\\w+://");
}
// Return true for any string that contains a / that does
// have a / as it's previous or next char.
// hasPath("http://x.com") => false
// hasPath("x.com/") => true
static bool hasPath(String url)
{
return Regex.IsMatch(url, "[^/]/(?:[^/]|$)");
}
// Adds http:// if URL lacks protocol and / if URL lacks path
static String stringToURL(String str)
{
return ( hasProto(str) ? "" : "http://" ) +
str +
( hasPath(str) ? "" : "/" );
}
}