在WinRT中,往往涉及到获取网络资源或者截取网址信息的情形,因此跟Uri打交道的情况就比较多了。而一般情况
下需要快速准确地获取网址资源中某些特定的QueryString信息,那么选择工具是尤其重要的了。
而在WinRT中,利用WwwFormUrlDecoder类就可以完美解决问题。直接贴上代码说明一切:
XAML:
<Page
x:Class="GetUriQueryString.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:GetUriQueryString"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="测试Uri:" FontSize="25"/>
<TextBlock Text="http://blog.csdn.net/u010792238?viewmode=contents" FontSize="20" TextWrapping="WrapWholeWords"></TextBlock>
<Button x:Name="getUriQueryString" Content="获取" Click="getUriQueryString_Click"/>
<TextBlock Text="结果:" FontSize="25"/>
<TextBlock x:Name="result" FontSize="30"/>
</StackPanel>
</Grid>
</Page>
.CS:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=391641 上有介绍
namespace GetUriQueryString
{
/// <summary>
/// 可用于自身或导航至 Frame 内部的空白页。
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
}
/// <summary>
/// 在此页将要在 Frame 中显示时进行调用。
/// </summary>
/// <param name="e">描述如何访问此页的事件数据。
/// 此参数通常用于配置页。</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// TODO: 准备此处显示的页面。
// TODO: 如果您的应用程序包含多个页面,请确保
// 通过注册以下事件来处理硬件“后退”按钮:
// Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件。
// 如果使用由某些模板提供的 NavigationHelper,
// 则系统会为您处理该事件。
}
private void getUriQueryString_Click(object sender, RoutedEventArgs e)
{
//可以将要获取的信息粗略的看成键值对,一一对应即可。比如viewmode对应的是contents
Uri uri = new Uri("http://blog.csdn.net/u010792238?viewmode=contents");
WwwFormUrlDecoder decoder = new WwwFormUrlDecoder(uri.Query);
//获取viewmode键对应的值
var viewmode = decoder.GetFirstValueByName("viewmode");
result.Text = viewmode;
//循环获取键值
foreach(var keyValue in decoder)
{
//键
var key = keyValue.Name;
//值
var value = keyValue.Value;
}
}
}
}
当然就不同的语言环境,微软有不同的封装类来帮助程序员。在Console等应用中,可以使用NameValueCollection
类来获取。
Uri uri = new Uri("http://blog.csdn.net/u010792238?viewmode=contents");
NameValueCollection nvc= HttpUtility.ParseQueryString(uri.Query);
for (int index = 0; index < nvc.Count; index++)
{
var name = nvc.Keys[index]; //键
var value = nvc[index]; //值
}
推荐链接:【WinRT】获取 Uri 中的参数(QueryString)键值对