Obtenir raw post demande dans une ApiController

Je suis en train de mettre en œuvre un Paypal Notification Instantanée de Paiement (IPN)

La protocole est

  1. PayPal HTTP Postes de votre auditeur un IPN message vous informe d'un événement.
  2. Votre auditeur retourne un vide réponse HTTP 200 à PayPal.
  3. Votre port d'écoute HTTP Postes de l'ensemble de la inchangée message
    PayPal; le message doit contenir les mêmes champs (dans le même ordre)
    comme le message d'origine et être codés de la même manière que le
    message d'origine.
  4. PayPal envoie un unique mot de back - soit VÉRIFIÉE (si le message
    correspond à l'original) ou INVALIDE (si le message ne correspond pas à la
    d'origine).

Pour l'instant j'ai

        [Route("IPN")]
        [HttpPost]
        public void IPN(PaypalIPNBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                //if you want to use the PayPal sandbox change this from false to true
                string response = GetPayPalResponse(model, true);

                if (response == "VERIFIED")
                {

                }
            }
        }

        string GetPayPalResponse(PaypalIPNBindingModel model, bool useSandbox)
        {
            string responseState = "INVALID";
            //Parse the variables
            //Choose whether to use sandbox or live environment
            string paypalUrl = useSandbox ? "https://www.sandbox.paypal.com/"
            : "https://www.paypal.com/cgi-bin/webscr";

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(paypalUrl);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                //STEP 2 in the paypal protocol
                //Send HTTP CODE 200
                HttpResponseMessage response = client.PostAsync("cgi-bin/webscr", "").Result;

                if (response.IsSuccessStatusCode)
                {
                    //STEP 3
                    //Send the paypal request back with _notify-validate
                    model.cmd = "_notify-validate";
                    response = client.PostAsync("cgi-bin/webscr", THE RAW PAYPAL REQUEST in THE SAME ORDER ).Result;

                    if(response.IsSuccessStatusCode)
                    {
                        responseState = response.Content.ReadAsStringAsync().Result;
                    }
                }
            }

            return responseState;
        }

Mon problème est que je n'arrive pas à comprendre comment envoyer l'original de la demande de Paypal avec les paramètres dans le même ordre.
J'ai pu développer un HttpContent avec mon PaypalIPNBindingModel mais je ne peux pas garantir l'ordre.

Est-il possible que je puisse atteindre son but?

Merci

Il n'est pas possible de le recevoir en tant que chaîne de PayPal, vous pouvez désérialiser vous-même, faire ce que vous devez faire pour le valider, puis de publier la chaîne renvoyée?
Merci, oui je pense, mais j'ai pensé qu'il serait plus élégant d'utiliser le modèle de liaisons de asp.net mais si il n'y a pas d'autre moyen, je vais faire désérialiser moi-même.

OriginalL'auteur Marc | 2014-10-30