2016-05-14 11 views
0

Ich habe ein Problem, da ich einige JSON an eine URL senden muss. Wenn ich alle meine JSON und Token an die Seite sende.POST JSON zu einer anderen URL

Dann wird kein Inhalts-JSON-Wert in das System eingegeben.

Ich habe überprüft, ob es einige Inhalte gibt und es ist da, aber es sendet einfach nicht wie JSON-Werte.

string apiKeyToken = model.reepaytoken; // TOKEN HERE. 

string URLLink = APIClassPay.HelperPay.CreateCustomerURL;//URL to send it json to. 

WebClient client = new WebClient(); 
      //JSON coming here! 
var JSONCustomer = APIClassPay.HelperPay.CreateCustomer(model.Brugernavn, model.Adresse, model.Byen, model.Postnr.ToString(), model.Mobil.ToString(), model.Fornavn, model.Efternavn); 
client.Headers.Add("text/json", JSONCustomer); 
client.Headers.Set("X-Auth-Token", apiKeyToken); 
string reply = client.DownloadString(URLLink); 

Wenn ich blase mein JSON sieht so aus.

[HttpPost] 
public ActionResult information(BuyMedlemskabViewModel model) 
{ 
    DataLinqDB db = new DataLinqDB(); 
    var Pric = db.PriceValues.FirstOrDefault(i => i.id == model.HiddenIdMedlemskab); 
    if (Pric != null) 
    { 
     string _OrderValue = DateTime.Now.Year + Helper.Settings.PlanValue(); 
     Session[HelperTextClass.HelperText.SessionName.OrderId] = _OrderValue; 

     Session[HelperTextClass.HelperText.SessionName.FakturaId] = model.HiddenIdMedlemskab; 

     Session[HelperTextClass.HelperText.SessionName.fornavn] = model.Fornavn; 
     Session[HelperTextClass.HelperText.SessionName.efternavn] = model.Efternavn; 
     Session[HelperTextClass.HelperText.SessionName.Adresse] = model.Adresse; 
     Session[HelperTextClass.HelperText.SessionName.Post] = model.Postnr; 
     Session[HelperTextClass.HelperText.SessionName.Byen] = model.Byen; 
     Session[HelperTextClass.HelperText.SessionName.Mobil] = model.Mobil; 


     string apiKeyToken = model.reepaytoken;. 

     string URLLink = APIClassPay.HelperPay.CreateCustomerURL;//URL to send it json to. 

     WebClient client = new WebClient(); 
     //JSON coming here! 
     var JSONCustomer = APIClassPay.HelperPay.CreateCustomer(model.Brugernavn, model.Adresse, model.Byen, model.Postnr.ToString(), model.Mobil.ToString(), model.Fornavn, model.Efternavn); 
     client.Headers.Add("text/json", JSONCustomer); 
     client.Headers.Set("X-Auth-Token", apiKeyToken); 
     string reply = client.DownloadString(URLLink); 


    } 
    return RedirectToAction("information"); 
} 

EDIT - Update (ERROR HIER):

enter image description here

ReePay API-Referenz: https://docs.reepay.com/api/

Antwort

1

Ich denke, es gibt ein paar Dinge, werden Sie zu beheben haben:

Zuerst versuchen Sie offensichtlich eine Ressource (in der Regel ein POST oder PUT, Sprechen in REST-words, aber Sie verwenden WebClient 's DownloadString -Methode which performs a GET. Also denke ich, dass Sie wahrscheinlich einen POST oder PUT verwenden sollten, aber welcher zu wählen genau ist hängt von dem Web Service ab, den Sie kontaktieren.

Dann scheinen Sie die Content-Type -header verwechselt haben und versucht, die Nutzlast dort zu packen. Die Payload - Ihr Kunde JSON - muss in den Körper der Anfrage eingefügt werden.

Basierend auf Ihren vorherigen Fragen nehme ich an, dass der Dienst, den Sie kontaktieren möchten, entweder PayPal oder QuickPay ist. Um Ihnen bei dieser Frage weiterhelfen zu können, wäre es hilfreich, wenn Sie angeben könnten, welche Sie verwenden.

Wenn es QuickPay ist, beachten Sie bitte, dass es eine official .NET client gibt, die Sie verwenden könnten, anstatt WebClient auf eigene Faust zu verwenden.

Aber sowieso, um HTTP-Anfragen zu machen, würde ich vorschlagen, dass Sie HttpClient zugunsten WebClient verwenden. Sie würden tun es in der Regel in einer Weise, wie folgt aus:

using (var httpClient = new HttpClient()) 
{ 
    var request = new HttpRequestMessage(HttpMethod.Post, 
     APIClassPay.HelperPay.CreateCustomerURL); 
    request.Headers.Add("X-Auth-Token", apiKeyToken); 
    request.Headers.Add("Content-Type", "application/json"); 
    request.Content = new StringContent(JSONCustomer); 

    var response = await httpClient.SendAsync(request); 
} 

EDIT:

Wie Sie in einem Kommentar zu klären, der Service, den Sie verwenden Reepay ist. Wenn Sie sich die Dokumentation des create customer method ansehen, können Sie sehen, dass die erforderliche HTTP-Methode POST ist. Daher sollte das obige Code-Snippet im Allgemeinen passen.

In Bezug auf den Kompilierungsfehler, mit dem Sie konfrontiert wurden, habe ich den Code-Snipped oben aktualisiert. Bei den von mir gewählten Variablennamen ist ein Fehler aufgetreten. Bitte beachten Sie, dass Sie das Schlüsselwort await fallen gelassen haben, wie ich aus Ihrem Screenshot sehen kann. Bitte geben Sie es erneut ein. Wenn der Compiler sich darüber beschwert, ist es sehr wahrscheinlich, dass die .NET-Framework-Version Ihres Projekts weniger als 4,5 ist, was notwendig ist, um async/await zu verwenden.

Sie sollten also die .NET-Framework-Version Ihres Projekts bestenfalls auf Version 4.6.1 aktualisieren, da Microsoft recently announced die Unterstützung für 4.5 und andere nicht mehr unterstützt. Schauen Sie sich here an, wie man das macht.

+0

Vielen Dank für Ihre Zeit. Entschuldigung, ich antworte ein bisschen spät. Aber ich mache keine Quickpay oder Paypal. Die beiden Lösungen können meine Anforderungen der Region für die Mitgliedschaft auf meiner Website nicht erfüllen. Ich bin mir bewusst, dass sie etwas auf Github haben, aber sie bieten nicht an, dass ich die Mitgliedschaft auf meiner Website nutzen kann. Ich hatte gerade Post und google mich vorwärts auf allen möglichen Wegen, um eine Lösung zu finden, die ich denke, dass es einfach schien. Ang Ihren Code gibt dann den Fehler HTTPClient und besagte Benutzer ich nicht erwarten. Unglücklicherweise. –

+0

Nun, können Sie dann sagen, welchen Service Sie verwenden möchten? Gibt es eine öffentliche API-Referenz? Was ist der Fehler, den Sie mit HttpClient bekommen? Das Keyword erwartet ist unbekannt? Sie können das beheben, indem Sie die .NET Framework-Version Ihres Projekts aktualisieren. – khlr

+0

ich kann sehen, Danke für Sie. Ich habe .Net Framework 4.6. –