API de recherche StackOverflow
-
14-11-2019 - |
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é?
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.