• windows8 AtomPub协议


    AtomPub协议示例
    这个示例演示了如何获取、创建、更新和删除从网站上使用窗口运行时执行AtomPub标准。这个样品中所提供的c#编程语言,需要一些经验与网络编程。
      partial class MainPage
        {
            // The default values for the WordPress site
            private const string DefaultBaseUri = "http://<Your Wordpress Site>.wordpress.com/";
            private const string DefaultUser = "";
            private const string DefaultPassword = "";

            // The default Service Document and Edit 'URIs' for WordPress
            private const string DefaultEditUri = "./wp-app.php/posts";
            private const string DefaultServiceDocUri = "./wp-app.php/service";
            private const string DefaultFeedUri = "./?feed=atom";

            private AtomPubClient client;
            private SyndicationFeed currentFeed;
            private int currentItemIndex;

            private Action displayCurrentItem;

            private SyndicationItem CurrentItem
            {
                get
                {
                    if (currentFeed != null && currentItemIndex >= 0
                        && currentItemIndex < currentFeed.Items.Count)
                    {
                        return currentFeed.Items[currentItemIndex];
                    }
                    return null;
                }
            }

            public MainPage()
            {
                InitializeComponent();

                ScenarioList.SelectionChanged += new SelectionChangedEventHandler(ScenarioList_SelectionChanged);

                // Starting scenario is the first or based upon a previous selection
                ListBoxItem startingScenario = null;
                if (SuspensionManager.SessionState.ContainsKey("SelectedScenario"))
                {
                    String selectedScenarioName = SuspensionManager.SessionState["SelectedScenario"as string;
                    startingScenario = this.FindName(selectedScenarioName) as ListBoxItem;
                }

                ScenarioList.SelectedItem = startingScenario != null ? startingScenario : Scenario1;

                Scenario1Init();
                Scenario2Init();
                Scenario3Init();
                Scenario4Init();

                ServiceAddressField.Text = DefaultBaseUri;
                UserNameField.Text = DefaultUser;
                PasswordField.Password = DefaultPassword;

                ApplicationView.GetForCurrentView().ViewStateChanged
                    += new TypedEventHandler<ApplicationView, ApplicationViewStateChangedEventArgs>(MainPage_ViewStateChanged);
            }

            void DisplayProperties_OrientationChanged(object sender)
            {
                if (DisplayProperties.CurrentOrientation == DisplayOrientations.Portrait
                    || DisplayProperties.CurrentOrientation == DisplayOrientations.PortraitFlipped)
                {
                    VisualStateManager.GoToState(this"Portrait"false);
                }
            }

            void MainPage_ViewStateChanged(ApplicationView sender, ApplicationViewStateChangedEventArgs args)
            {
                switch (args.ViewState)
                {
                    case ApplicationViewState.Filled:
                        VisualStateManager.GoToState(this"Filled"false);
                        break;
                    case ApplicationViewState.FullScreenLandscape:
                        VisualStateManager.GoToState(this"FullScreenLandscape"false);
                        break;
                    case ApplicationViewState.Snapped:
                        VisualStateManager.GoToState(this"Snapped"false);
                        break;
                    case ApplicationViewState.FullScreenPortrait:
                        VisualStateManager.GoToState(this"FullScreenPortrait"false);
                        break;
                    default:
                        break;
                }
            }


            #region Scenario Specific Code

            void Scenario1Init()
            {
            }

            private async void Scenario1Start_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    UpdateClient();

                    // Note that this feed is public by default and will not require authentication.
                    
    // We will only get back a limited use feed, without information about editing.
                    Uri resourceUri = new Uri(ServiceAddressField.Text.Trim() + DefaultFeedUri);

                    Scenario1OutputField.Text += "Fetching resource: " + resourceUri + "\r\n";

                    currentFeed = await client.RetrieveFeedAsync(resourceUri);
                    currentItemIndex = 0;

                    Scenario1OutputField.Text += "Complete\r\n";

                    Scenario1DisplayCurrentItem();
                }
                catch (Exception ex) // For Debugging
                {
                    Scenario1OutputField.Text += ex + "\r\n";
                }
            }

            void Scenario1DisplayCurrentItem()
            {
                if (CurrentItem != null)
                {
                    ISyndicationText title = CurrentItem.Title;
                    Scenario1TitleField.Text = title != null ? // WebUtility.HtmlDecode // TODO: Not in the current build
                     (title.Text) : "(no title)";
                    ISyndicationText value = CurrentItem.Content ?? CurrentItem.Summary;
                    Scenario1WebView.NavigateToString(value != null ? value.Text : "(no value)");
                }
            }

            void Scenario1Reset()
            {
                currentFeed = null;
                Scenario1OutputField.Text = string.Empty;
                Scenario1TitleField.Text = string.Empty;
                Scenario1WebView.NavigateToString("<HTML></HTML>");
            }

            void Scenario2Init()
            {
            }

            private async void Scenario2Start_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    UpdateClient();
                    Uri serviceUri = new Uri(ServiceAddressField.Text.Trim() + DefaultServiceDocUri);

                    Scenario2OutputField.Text += "Fetching Service document: " + serviceUri + "\r\n";

                    Uri resourceUri = await FindEditUri(serviceUri);
                    // The result here is usually the same as:
                    
    // Uri resourceUri = new Uri(ServiceAddressField.Text.Trim() + DefaultEditUri);

                    Scenario2OutputField.Text += "Uploading Post: " + resourceUri + "\r\n";

                    SyndicationItem item = new SyndicationItem();
                    item.Title = new SyndicationText(Scenario2TitleField.Text, SyndicationTextType.Text);
                    item.Content = new SyndicationContent(Scenario2BodyField.Text, SyndicationTextType.Html);

                    SyndicationItem result = await client.CreateResourceAsync(resourceUri, item.Title.Text, item);

                    Scenario2OutputField.Text += "Posted at " + result.ItemUri + "\r\n";

                    Scenario2OutputField.Text += "Complete\r\n";
                }
                catch (Exception ex) // For debugging
                {
                    Scenario2OutputField.Text += ex + "\r\n";
                }
            }

            // Read the service document to find the URI we're suposed to use when uploading content.
            private async Task<Uri> FindEditUri(Uri serviceUri)
            {
                ServiceDocument serviceDocument = await client.RetrieveServiceDocumentAsync(serviceUri);

                foreach (Workspace workspace in serviceDocument.Workspaces)
                {
                    foreach (ResourceCollection collection in workspace.Collections)
                    {
                        if (string.Join(";", collection.Accepts) == "application/atom+xml;type=entry")
                        {
                            return collection.Uri;
                        }
                    }
                }

                throw new ArgumentException("Edit Uri not found in service document");
            }

            void Scenario2Reset()
            {
                Scenario2OutputField.Text = string.Empty;
            }

            void Scenario3Init()
            {
            }

            // Download a feed
            private async void Scenario3Start_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    UpdateClient();

                    // If we retrieve the feed via the Edit uri then we will be logged in and will be
                    
    // able to modify/delete the resource.
                    Uri resourceUri = new Uri(ServiceAddressField.Text.Trim() + DefaultEditUri);

                    Scenario3OutputField.Text += "Fetching feed: " + resourceUri + "\r\n";

                    currentFeed = await client.RetrieveFeedAsync(resourceUri);
                    currentItemIndex = 0;

                    Scenario3OutputField.Text += "Got feed\r\n";

                    Scenario3OutputField.Text += "Title: " + currentFeed.Title.Text + "\r\n";

                    if (CurrentItem != null)
                    {
                        Scenario3DisplayCurrentItem();

                        Scenario3OutputField.Text += "EditUri: " + CurrentItem.EditUri + "\r\n";
                    }

                    Scenario3OutputField.Text += "Complete\r\n";
                }
                catch (Exception ex) // For Debugging
                {
                    Scenario3OutputField.Text += ex + "\r\n";
                }
            }

            // Delete the current entry
            private async void Scenario3Delete_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    UpdateClient();

                    if (CurrentItem == null)
                    {
                        Scenario3OutputField.Text += "No item currently displayed, please download a feed first.\r\n";
                        return;
                    }

                    Scenario3OutputField.Text += "Deleting item: " + CurrentItem.EditUri + "\r\n";

                    await client.DeleteResourceItemAsync(CurrentItem);

                    Scenario3OutputField.Text += "Complete\r\n";

                    // Our feed is now out of date.  Re-fetch the feed before deleting something else.
                    currentFeed = null;
                    Scenario3TitleField.Text = string.Empty;
                    Scenario3WebView.NavigateToString("<HTML></HTML>");
                }
                catch (Exception ex) // For Debugging
                {
                    Scenario3OutputField.Text += ex + "\r\n";
                }
            }

            void Scenario3DisplayCurrentItem()
            {
                if (CurrentItem != null)
                {
                    ISyndicationText title = CurrentItem.Title;
                    Scenario3TitleField.Text = title != null ? // WebUtility.HtmlDecode // TODO: Not in the current build
                     (title.Text) : "(no title)";

                    ISyndicationText value = CurrentItem.Content ?? CurrentItem.Summary;
                    Scenario3WebView.NavigateToString(value != null ? value.Text : "(no value)");
                }
            }

            void Scenario3Reset()
            {
                currentFeed = null;
                Scenario3OutputField.Text = string.Empty;
                Scenario3TitleField.Text = string.Empty;
                Scenario3WebView.NavigateToString("<HTML></HTML>");
            }

            void Scenario4Init()
            {
            }

            private async void Scenario4Start_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    UpdateClient();

                    // If we retrieve the feed via the Edit uri then we will be logged in and be
                    
    // able to modify/delete the resource.
                    Uri resourceUri = new Uri(ServiceAddressField.Text.Trim() + DefaultEditUri);

                    Scenario4OutputField.Text += "Fetching feed: " + resourceUri + "\r\n";

                    currentFeed = await client.RetrieveFeedAsync(resourceUri);
                    currentItemIndex = 0;

                    Scenario4OutputField.Text += "Got feed\r\n";

                    Scenario4OutputField.Text += "Title: " + currentFeed.Title.Text + "\r\n";

                    if (CurrentItem != null)
                    {
                        Scenario4DisplayCurrentItem();

                        Scenario4OutputField.Text += "EditUri: " + CurrentItem.EditUri + "\r\n";
                    }

                    Scenario4OutputField.Text += "Complete\r\n";
                }
                catch (Exception ex) // For Debugging
                {
                    Scenario4OutputField.Text += ex + "\r\n";
                }
            }

            // Update the current entry
            private async void Scenario4Save_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    UpdateClient();

                    if (CurrentItem == null)
                    {
                        Scenario4OutputField.Text += "No item currently displayed, please download a feed first.\r\n";
                        return;
                    }

                    Scenario4OutputField.Text += "Updating item: " + CurrentItem.EditUri + "\r\n";

                    // Update the item
                    SyndicationItem updatedItem = new SyndicationItem();
                    updatedItem.Title = new SyndicationText(Scenario4TitleField.Text, SyndicationTextType.Text);
                    updatedItem.Content = new SyndicationContent(Scenario4BodyField.Text, SyndicationTextType.Html);

                    await client.UpdateResourceAsync(CurrentItem.EditUri, updatedItem);

                    Scenario4OutputField.Text += "Complete\r\n";
                }
                catch (Exception ex) // For Debugging
                {
                    Scenario4OutputField.Text += ex + "\r\n";
                }
            }

            void Scenario4DisplayCurrentItem()
            {
                if (CurrentItem != null)
                {
                    ISyndicationText title = CurrentItem.Title;
                    Scenario4TitleField.Text = title != null ? // WebUtility.HtmlDecode // TODO: Not in the current build
                      (title.Text) : "(no title)";

                    ISyndicationText value = CurrentItem.Content ?? CurrentItem.Summary;
                    Scenario4BodyField.Text = value != null ? value.Text : "(no value)";
                }
            }

            void Scenario4Reset()
            {
                currentFeed = null;
                Scenario4OutputField.Text = string.Empty;
                Scenario4TitleField.Text = string.Empty;
                Scenario4BodyField.Text = string.Empty;
            }

            #endregion

            private void UpdateClient()
            {
                client = new AtomPubClient();
                client.BypassCacheOnRetrieve = true;
                // Assume the credentials have changed
                client.ServerCredential = new PasswordCredential()
                {
                    UserName = UserNameField.Text,
                    Password = PasswordField.Password
                };
            }

            private void PreviousItemButton_Click(object sender, RoutedEventArgs e)
            {
                if (currentFeed != null && currentItemIndex > 0)
                {
                    currentItemIndex--;
                    displayCurrentItem();
                }
            }

            private void NextItemButton_Click(object sender, RoutedEventArgs e)
            {
                if (currentFeed != null && currentItemIndex < currentFeed.Items.Count - 1)
                {
                    currentItemIndex++;
                    displayCurrentItem();
                }
            }

            void ScenarioList_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                ResetAll();
                if (ScenarioList.SelectedItem == Scenario1)
                {
                    Scenario1Input.Visibility = Visibility.Visible;
                    Scenario1Output.Visibility = Visibility.Visible;
                    displayCurrentItem = Scenario1DisplayCurrentItem;
                }
                else if (ScenarioList.SelectedItem == Scenario2)
                {
                    Scenario2Input.Visibility = Visibility.Visible;
                    Scenario2Output.Visibility = Visibility.Visible;
                    displayCurrentItem = null;
                }
                else if (ScenarioList.SelectedItem == Scenario3)
                {
                    Scenario3Input.Visibility = Visibility.Visible;
                    Scenario3Output.Visibility = Visibility.Visible;
                    displayCurrentItem = Scenario3DisplayCurrentItem;
                }
                else if (ScenarioList.SelectedItem == Scenario4)
                {
                    Scenario4Input.Visibility = Visibility.Visible;
                    Scenario4Output.Visibility = Visibility.Visible;
                    displayCurrentItem = Scenario4DisplayCurrentItem;
                }

                if (ScenarioList.SelectedItem != null)
                {
                    ListBoxItem selectedListBoxItem = ScenarioList.SelectedItem as ListBoxItem;
                    SuspensionManager.SessionState["SelectedScenario"] = selectedListBoxItem.Name;
                }
            }

            public void ResetAll()
            {
                displayCurrentItem = null;

                Scenario1Input.Visibility = Visibility.Collapsed;
                Scenario1Output.Visibility = Visibility.Collapsed;
                Scenario1Reset();
                Scenario2Input.Visibility = Visibility.Collapsed;
                Scenario2Output.Visibility = Visibility.Collapsed;
                Scenario2Reset();
                Scenario3Input.Visibility = Visibility.Collapsed;
                Scenario3Output.Visibility = Visibility.Collapsed;
                Scenario3Reset();
                Scenario4Input.Visibility = Visibility.Collapsed;
                Scenario4Output.Visibility = Visibility.Collapsed;
                Scenario4Reset();
            }

            async void Footer_Click(object sender, RoutedEventArgs e)
            {
                await Windows.System.Launcher.LaunchUriAsync(new Uri(((HyperlinkButton)sender).Tag.ToString()));
            }


    完整示例

    /Files/risk/windows8/AtomPub协议sample.rar 

  • 相关阅读:
    链表问题----反转部分单向链表
    HTTP请求详解
    链表问题----删除链表的中间节点和a/b处的节点
    链表问题----删除倒数第K个节点
    栈和队列----最大值减去最小值小于等于num的子数组的数量
    栈和队列----求最大子矩阵的大小
    TCP/IP、Http、Socket的区别
    栈和队列----生成窗口的最大值数组
    linux根文件系统制作,busybox启动流程分析
    linux 内核启动流程分析,移植
  • 原文地址:https://www.cnblogs.com/risk/p/2494785.html
Copyright © 2020-2023  润新知