2016-08-11 1 views
0

Dies ist meist mit meiner früheren Frage verbunden, aber ist anders als das. Ich integriere ein Zahlungs-Gateway in meinen Code und ich habe eine Post-URL zum Posten. Also auf Knopfdruck geht das Steuerelement aus meiner Sicht zum Controller, wo ich eine Methode anrufe, um den Post zu machen.Was ist der Rückgabetyp, um auf eine externe Seite in ASP.NET MVC umzuleiten?

Also meine Sorge ist, ich benutze derzeit den folgenden Code für die Buchung auf die URL, aber der Anbieter ist nicht bereit, so kann ich nicht testen, aber ich möchte wissen, ob ich den richtigen Rückgabetyp hier verwenden.

Wird dies mich auf die Anbieter-Website/Seite vom Controller umleiten?

Was ist die richtige Art und Weise zu tun? Einige, wo ich bereit, ich kann es nur von Javascript und nicht vom Controller.

Kann Körper bitte klarstellen Ich habe in den letzten paar Tagen damit zu kämpfen?

public HttpWebResponse SendPostRequest(string data, string url) 
{ 
    var datetime = DateTime.UtcNow; 
    data = string.Format("ID*1100|Field01*19101|FirstName*james|LastName*MEZE|AmountDue*20000|CurrentTime*7/5/2016 4:25 PM); 
    var requestPayload = Encrypt(data); 
    url = "https://www.example.com/Account/SSO/Home"; 

    HttpWebRequest httpRequest = (HttpWebRequest) HttpWebRequest.Create(url); 
    httpRequest.Method = "POST"; 
    httpRequest.ContentType = "text/plain";// "application/x-www-form-urlencoded"; 
    httpRequest.ContentLength = encryptedRequestPayload.Length; 

    var streamWriter = new StreamWriter(httpRequest.GetRequestStream()); 
    streamWriter.Write(encryptedRequestPayload); 
    streamWriter.Close(); 

    /*var response = (HttpWebResponse)httpRequest.GetResponse(); 
    var statusCode = response.StatusCode; 
    var description = response.StatusDescription; 

    var sr = new StreamReader(response.GetResponseStream()); 
    var text = sr.ReadToEnd();*/ 

    return (HttpWebResponse) httpRequest.GetResponse(); 
} 

die HttpWebResponse Rückkehr zeigt mir nur eine leere Seite mit der Linie System.Net.HttpWebResponse. Aber in der Antwort sehe ich die XML-Nachricht mit der Antwort, die besagt, dass der Dienst Kontaktadministratoren heruntergefahren ist. Warum kann ich diese Nachricht auf der Webseite nicht sehen? bitte hilfe.

Antwort

0

Sie scheinen zwei Probleme zu haben:

1) Der Server reagiert nicht so, wie Sie wollen. Sie müssen wahrscheinlich den Administrator kontaktieren, wie die Nachricht sagt. 2) Sie geben nichts zurück, was der ASP.NET MVC erwartet, daher zeigt die ToString()-Methode, die vom Framework aufgerufen wird, nur System.Net.HttpWebResponse an.

Sie sind jedoch nah dran. Sollten Sie den Text, den Sie aus dem Antwort-Stream erhalten, nicht zurückgeben?

Sie können schriftlich so tun:

return Content(text); // after uncommenting your code. 

Diese Antwort zeigt Ihnen einen erfolgreichen Versuch posting data to a server and passing the response to the client.

+0

Das hat mir geholfen. Vielen Dank. –

1

Um auf eine externe Webseite umzuleiten, können Sie die Redirect Methode verwenden und die URL übergeben.

public ActionResult SendPostRequest(string data, string url) 
{ 
    //do youre stuff 

    return Redirect("https://www.example.com/Account/SSO/Home"); 
} 

, die nur für HTTP GET funktioniert ruft, weil der Browser eine neue GET tun, wenn sie ein Umleitungen Ergebnis geworden.

Wenn Sie an eine andere Seite senden und die Ergebnisseite Ihrem Besucher zeigen möchten, ist der einzige mögliche Weg, dies zu erreichen, die Verwendung von JavaScript. Dazu können Sie einige einfache HTML mit einem <script> Tag zurückgeben, die eine <form> mit HTTP POST sendet.

//$ is the C#6 syntax of string.Format 
return Content([email protected]" 
    <form action='https://www.example.com/Account/SSO/Home' id='myForm' method='post'> 
     <input type='hidden' name='value1' value='{value1}' /> 
     <input type='hidden' name='value2' value='{value2}' /> 
    </form> 
    <script> 
     document.getElementById('myForm').submit(); //submit the form 
    </script>"); 

bekam ich die Idee, mit einer Form von this answer

+0

aber in diesem Beitrag sehe ich es sagt Umleitung ist nicht zu verwenden. http://stackoverflow.com/questions/27577011/redirect-with-post-parameters-in-mvc-4-for-payment-gateway-integration. Die URL, die ich habe, ist Post URL. Wird die oben beschriebene Methode funktionieren? –

+0

Wie poste ich die Parameter auch, wenn ich Redirect verwende?es sieht aus wie es keine Überladungen hat –

+0

@Naadia POST-Weiterleitungen sind nicht möglich mit HTTP, sie werden immer GET. Das Übergeben von GET-Parametern ist einfach, indem Sie sie mit der Syntax "? Key1 = value1 & key = value2" an die URL anhängen. Um einen POST zu senden, habe ich eine Idee an meine Antwort angehängt. – Koopakiller

Verwandte Themen