2017-11-19 2 views
0

worden auf Arbeits APIs für ein paar Tage zu lernen, fand es ein wenig schwierig, aber es geschaffen, dies mustern aus einer ganzen Menge Beiträge zu lesen:.NET-API anfordern Speicher nicht auf Datenbank

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "ID,domain,contact,contactname,price,type,TF,CF,RI,MJTopicsID,UserTableID")] Identifier identifier) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Identifiers.Add(identifier); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
    "https://api.majestic.com/api/json?app_api_key=KEY&cmd=GetIndexItemInfo&items=1&item0=http://www.majestic.com&datasource=fresh"); 

    { 
     WebResponse response = request.GetResponse(); 
     using (Stream responseStream = response.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
      string json2 = reader.ReadToEnd(); 
      MajesticData r = JsonConvert.DeserializeObject<MajesticData>(json2); 
     } 

     ViewBag.MJTopicsID = new SelectList(db.MJTopicss, "ID", "ID", identifier.MJTopicsID); 
     ViewBag.UserTableID = new SelectList(db.UserTables, "ID", "userIdentity", identifier.UserTableID); 
     return View(identifier); 
    } 
} 

habe ich dann http://json2csharp.com/ um meine Modelle zu erstellen und das RootObject zu MajesticData zu ändern. Ich habe die Tabellen in meinem initialisiert und dann innerhalb der [httpPost] create Aktion eines Controllers ausgeführt, obwohl die create Aktion in Ordnung ist und Daten in die identifier Tabelle schreibt und die View zurückgibt, jedoch keine Daten an das MajesticData Model oder Andere?

Aktualisierung mit Save:

public ActionResult ApiCall() 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.majestic.com/api/json?app_api_key=KEY&cmd=GetIndexItemInfo&items=1&item0=http://www.majestic.com&datasource=fresh"); 
     { 
      WebResponse response = request.GetResponse(); 
      using (Stream responseStream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
       string json2 = reader.ReadToEnd(); 
       Datum newdata = JsonConvert.DeserializeObject<Datum>(json2); 
       db.Datums.Add(newdata); 
       db.SaveChanges(); 
      } 
     } 
    } 

Antwort

0

Sie Ihre MajesticData Verwerfen Objekt, sobald Sie es aus dem json konstruieren. Sie benötigen etwas Code, um Daten daraus zu extrahieren und in Ihren ViewBag zu legen (oder woanders auszugeben).

Aber ich werde sagen, es merkwürdig sieht, dass Sie die API nur nennen, wenn das Model nicht gültig ...

+0

Nicoholson Danke für die Antwort! Oh ich sehe, ich folgte diesem Thread https://stackoverflow.com/questions/34043384/easiest-way-to-parse-json-response. Also ich habe ein Modell erstellt, das jede Variable aus dem Objekt akzeptiert, wie speichere ich es, die Antwort endete, also nahm ich an, dass es war, da http://json2csharp.com/ mein Modell in 4 Klassen gab. Entschuldigung, wenn das in Wirklichkeit einfach ist, kann es einfach nicht herausfinden! – liamcook

+0

Es ist definitiv nicht genug, um es nur auf eine lokale Variable zu "speichern". Sie können die relevanten Eigenschaften in den ViewBag kopieren, damit sie beim Rendern der Seite für den Client verfügbar sind, oder Sie können sie in eine Datenbanktabelle schreiben, wenn Sie später darauf zugreifen müssen. Übrigens können Sie Ihren Code verkürzen, wenn Sie WebClient.DownloadString() verwenden, um die API aufzurufen. –

+0

Von was ich verstehe, dass nicht ein Objekt der gleichen Variablen wie das MajesticData-Modell erstellen würde es keine Möglichkeit geben, dies direkt in der Datenbank zu speichern? Ich weiß nicht genau, wo die Daten liegen, das ist mein Problem. Ahh vielen Dank! Ja, ich habe so viel Zeit damit verbracht, den Code herauszufinden, ich wusste nicht, dass er im ungültigen Zustand war, also wurde er nicht einmal hahaha ... – liamcook

Verwandte Themen