您的位置:首页 > 产品设计 > UI/UE

WinRT中如何快速获取Uri地址中的QueryString键值对信息

2015-07-08 22:31 423 查看
在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)键值对
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: