Question

Je voudrais utiliser la méthode de recherche de l'API StackOverflow pour renvoyer la structure JSON des résultats en fonction d'un mot-clé de recherche, puis afficher ces résultats (titre, description et URL) dans le RecherchResults Div.

Je suis nouveau dans C # et ma première tentative a été quelque chose comme ceci:

    protected void searchStockOverflow(string y)
    {

        var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://api.stackoverflow.com/1.1/search?intitle="+y);
        httpWebRequest.ContentType = "text/json";
        httpWebRequest.Method = "POST";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{ \"intitle\": \"" + y + "\"}";

            streamWriter.Write(json);
        }
        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var responseText = streamReader.ReadToEnd();

            SearchResults.InnerHtml += "<div style='border:1px solid blue;margin:5px;'>";
            SearchResults.InnerHtml += responseText + "<br />";
            SearchResults.InnerHtml += "</div><br style='clear:both;' />";
        }
    }

Le problème est que ce qui est renvoyé ressemble à des ordures de Dingbats - je suppose parce qu'il est sérialisé et doit être désérialisé?

Était-ce utile?

La solution

Je dirais certainement envisager d'utiliser le client du reste; Cependant, pour examiner les problèmes ... en général, vous voulez désérialiser les données en tant que JSON manuellement, alors Exécutez ces données via votre code d'interface utilisateur. Par exemple:

static void SearchStackOverflow(string y)
{
    var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://api.stackoverflow.com/1.1/search?intitle=" + Uri.EscapeDataString(y));
    httpWebRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
    httpWebRequest.Method = "GET";
    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    string responseText;
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        responseText = streamReader.ReadToEnd();
    }
    var result = (SearchResult)new JavaScriptSerializer().Deserialize(responseText, typeof(SearchResult));
    .... do something with result ...
}
class SearchResult
{
    public List<Question> questions { get; set; }
}
class Question
{
    public string title { get; set; }
    public int answer_count { get; set; }
}

Qui utilise le javascriptSerializer de System.web.Extensions.dll

Autres conseils

Jetez également un œil à Bibliothèque client de simulation. qui est une API basée sur REST qui donne accès à la famille de sites Web StackOverflow.

Malheureusement, je suis sur mon Mac et je ne peux pas exécuter un test sur votre code. Vous voudrez peut-être vérifier l'encodage du personnage de votre page et du flux de réponse à revenir. S'ils ne correspondent pas; Cela pourrait faire en sorte que les personnages provenant du flux de réponse soient rendus incorrectement, d'où les déchets que vous voyez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top