在.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:
3333-1stackoverflow.com所以我需要一个能够理解host:port的类,当, but could be变得特别重要时,它就变得特别重要了。
奖金喋喋不休
控制台应用程序。
从另一个问题
一些需要解析的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]:80Url的格式是:
foo://example.com:8042/over/there?name=ferret#nose
\_/ \_________/ \__/\_________/\__________/ \__/
| | | | | |
scheme host port path query fragment奖金喋喋不休
再次指出,UriBuilder不起作用:
发布于 2013-11-23 15:47:10
如果需要确保用户输入时出现的某些字符串是有效的url,则可以使用Uri.TryCreate方法:
Uri uri;
string someUrl = ...
if (!Uri.TryCreate(someUrl, UriKind.Absolute, out uri))
{
// the someUrl string did not contain a valid url
// inform your users about that
}
else
{
var request = WebRequest.Create(uri);
// ... safely proceed with executing the request
}另一方面,如果您想要在.NET中构建urls,那么就有专门为此目的而设计的UriBuilder类。让我们举个例子。假设您希望构建以下url:http://example.com/path?foo=bar&baz=bazinga#some_fragment,其中bar和bazinga值来自用户:
string foo = ... coming from user input
string baz = ... coming from user input
var uriBuilder = new UriBuilder("http://example.com/path");
var parameters = HttpUtility.ParseQueryString(string.Empty);
parameters["foo"] = foo;
parameters["baz"] = baz;
uriBuilder.Query = parameters.ToString();
uriBuilder.Fragment = "some_fragment";
Uri finalUrl = uriBuilder.Uri;
var request = WebRequest.Create(finalUrl);
... safely proceed with executing the request发布于 2013-11-23 15:49:15
您可以使用UriBuilder类。
var builder = new UriBuilder(url);
builder.Port = 3333
builder.Scheme = "https";
var result = builder.Uri;发布于 2017-04-08 02:14:56
要想有效,URI需要有方案组件。"server:8088“不是有效的URI。"http://server:8088“是。请参阅https://www.rfc-editor.org/rfc/rfc3986
https://stackoverflow.com/questions/20164298
复制相似问题