.NET中是否有可用的帮助程序类允许我构建一个Url?
例如,如果用户输入一个字符串:
stackoverflow.com
我试图传递到HttpWebRequest:
WebRequest.CreateHttp(url);
它将失败,因为它不是有效的url(没有前缀)。
我想要的是能够解析用户输入的部分URL:
Uri uri = new Uri(url);
然后修复丢失的部分:
if (uri.Port == 0)
uri.Port = 3333;
if (uri.Scheme == "")
uri.Scheme = "https";
.NET是否有任何可用于解析和操纵Uri的类?
UriBuilder类无法完成工作
用户输入的值(例如stackoverflow.com:3333)有效;我只需要一堂课就可以把它分开。我尝试使用UriBuilder该类:
UriBuilder uriBuilder = new UriBuilder("stackoverflow.com:3333");
不幸的是,UriBuilder类无法处理URI:
- uriBuilder.Path =
3333 - uriBuilder.Port =
-1 - uriBuidler.Scheme =
stackoverflow.com
因此,我需要一个可以理解的课程,host:port当不是特别http重要但可能会特别重要时,这一点尤其重要。
奖金Chat不休
控制台应用程序。
从另一个问题
需要解析的URL的一些示例:
server:8088server:8088/func1server:8088/func1/SubFunc1http://serverhttp://server/func1http://server/func/SubFunc1http://server:8088http://server:8088/func1http://server:8088/func1/SubFunc1magnet://servermagnet://server/func1magnet://server/func/SubFunc1magnet://server:8088magnet://server:8088/func1magnet://server:8088/func1/SubFunc1http://[2001:db8::1]http://[2001:db8::1]:80
网址的格式为:
foo://example.com:8042/over/there?name=ferret#nose
\_/ \_________/ \__/\_________/\__________/ \__/
| | | | | |
scheme host port path query fragment
奖金Chat不休
再次指出,UriBuilder不起作用:
UriBuilder正确处理-stackoverflow.com:3333是带有schemestackoverflow.com和path的URI3333。如果您希望以其他方式解析某些内容,则必须指定您希望行为如何有所不同。您可能只是可以假设一个未知的方案是主机名,或者编写自己的UriParser。