没有它,如何从uri字符串获取Scheme?

时间:2014-08-16 10:04:14

标签: c# string http https

我想从简单的DNS字符串中获取正确的方案。我怎么能在C#中做到这一点?


示例:

我有这个:google.com

我希望得到这个:https://www.google.com


但是其他一些网站:msn.com

我希望得到这个:http://www.msn.com

1 个答案:

答案 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) ? "" : "/" );
    }
}