.NET中是否有可用的助手类来构建Url?
例如,如果用户输入字符串:
stackoverflow.com
Run Code Online (Sandbox Code Playgroud)
我试着把它传递给HttpWebRequest
:
WebRequest.CreateHttp(url);
Run Code Online (Sandbox Code Playgroud)
它将失败,因为它不是有效的URL(它没有前缀).
我想要的是能够解析用户输入的部分网址:
Uri uri = new Uri(url);
Run Code Online (Sandbox Code Playgroud)
然后修复缺失的部分:
if (uri.Port == 0)
uri.Port = 3333;
if (uri.Scheme == "")
uri.Scheme = "https";
Run Code Online (Sandbox Code Playgroud)
.NET是否有任何可用于解析和操作Uri的类?
用户输入的值(例如stackoverflow.com:3333
)有效; 我只需要一个班级来分开它.我尝试使用这个UriBuilder
类:
UriBuilder uriBuilder = new UriBuilder("stackoverflow.com:3333");
Run Code Online (Sandbox Code Playgroud)
不幸的是,UriBuilder类无法处理URI:
3333
-1
stackoverflow.com
所以我需要一个能够理解的课程,host:port
尤其是当课程不是特别http
重要时,尤其如此.
控制台应用.
一些需要解析的URL示例:
server:8088
server:8088/func1
server:8088/func1/SubFunc1
http://server
http://server/func1
http://server/func/SubFunc1
http://server:8088
http://server:8088/func1
http://server:8088/func1/SubFunc1
magnet://server
magnet://server/func1
magnet://server/func/SubFunc1
magnet://server:8088
magnet://server:8088/func1
magnet://server:8088/func1/SubFunc1
Url的格式为:
foo://example.com:8042/over/there?name=ferret#nose
\_/ \_________/ \__/\_________/\__________/ \__/
| | | | | |
scheme host port path query fragment
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 60
如果您需要确保某些字符串作为用户输入是有效的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
}
Run Code Online (Sandbox Code Playgroud)
现在,如果另一方面,您想要在.NET中构建URL,那么就是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
Run Code Online (Sandbox Code Playgroud)
Lee*_*Lee 15
您可以使用UriBuilder类.
var builder = new UriBuilder(url);
builder.Port = 3333
builder.Scheme = "https";
var result = builder.Uri;
Run Code Online (Sandbox Code Playgroud)
小智 8
为了有效,URI 需要具有方案组件。“server:8088”不是有效的 URI。“http://server:8088”是。参见https://www.rfc-editor.org/rfc/rfc3986
归档时间: |
|
查看次数: |
81838 次 |
最近记录: |