.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-1stackoverflow.com所以我需要一个能够理解的课程,host:port尤其是当课程不是特别http重要时,尤其如此.
控制台应用.
一些需要解析的URL示例:
server:8088 server: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/SubFunc1Url的格式为:
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 次 |
| 最近记录: |