div*_*ira 5 .net c# url-encoding windows-runtime windows-store-apps
我想访问带有HTTP GET查询字符串的Web资源,例如:
http://stackoverflow.com/search?q=search%20example&tab=relevance
Run Code Online (Sandbox Code Playgroud)
在常规.NET Framework 4.5应用程序中,您可以使用System.Net.WebClient.QueryString:
备注
QueryString属性包含NameValueCollection实例,该实例包含作为查询字符串附加到URI的名称/值对.QueryString属性的内容前面有一个问号(?),名称/值对用一个与号(&)分开.
对于Store Apps,您甚至可以使用Windows.Foundation.WwwFormUrlDecoder解析它们.
但是为了创建查询字符串,我在MSDN中找到的最佳代码段是:
UriBuilder baseUri = new UriBuilder("http://www.contoso.com/default.aspx?Param1=7890");
string queryToAppend = "param2=1234";
if (baseUri.Query != null && baseUri.Query.Length > 1)
baseUri.Query = baseUri.Query.Substring(1) + "&" + queryToAppend;
else
baseUri.Query = queryToAppend;
Run Code Online (Sandbox Code Playgroud)
(来自:http://msdn.microsoft.com/en-us/library/system.uribuilder.query(v = vs.110).aspx)
微软真的暗示我应该用"="和"&"自己加入我的参数吗?有没有更好的方法?
目前,据我所知,没有可用的。
创建反映原始 .NET 功能的东西非常容易:
public static class UriExtensions
{
public static Uri CreateUriWithQuery(Uri uri, NameValueCollection values)
{
var queryStr = new StringBuilder();
// presumes that if there's a Query set, it starts with a ?
var str = string.IsNullOrWhiteSpace(uri.Query) ?
"" : uri.Query.Substring(1) + "&";
foreach (var value in values)
{
queryStr.Append(str + value.Key + "=" + value.Value);
str = "&";
}
// query string will be encoded by building a new Uri instance
// clobbers the existing Query if it exists
return new UriBuilder(uri)
{
Query = queryStr.ToString()
}.Uri;
}
}
public class NameValueCollection : Dictionary<string, string>
{
}
Run Code Online (Sandbox Code Playgroud)
使用类似:
var uri = UriExtensions.CreateUriWithQuery(new Uri("http://example.com"),
new NameValueCollection { { "key1", "value1" }, { "key2", "value2" }});
Run Code Online (Sandbox Code Playgroud)
结果:
http://localhost/?key1=value1&key2=value2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |