Передача параметров веб-сервису и получение значения

#c# #php #http

Вопрос:

Мне нужно вызвать веб-сервис, передающий два параметра, чтобы получить значение. У меня есть два примера, в cURL и PHP. Я не знаю cURL и PHP.

локон:

 curl --request POST 
  --url https://authservices.satispay.com/g_business/v1/authentication_keys 
  --header 'content-type: application/json' 
  --data '{
    "public_key": "-----BEGIN PUBLIC KEY-----nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8p2Bk4jWuKmuuEkxa/JVsDNV2nU7UN9QeeXOGc/muQo3qAgARzvpfyL5LzvODzN1 Ic/ riaSd1P98LI6Nuc7VXXcJnprnk28XJef0jvxt8RlUwos5E4yhT9Vo3wfM q BWup2zhbGs2m6eoLCrSNEmbMPWne37LXyBTeQxlJwZaywIDAQABn-----END PUBLIC KEY-----",
    "token": "623ECX"
  }'
 

PHP:

 $authentication = SatispayGBusinessApi::authenticateWithToken("6N3ECU");

$publicKey = $authentication->publicKey;
$privateKey = $authentication->privateKey;
$keyId = $authentication->keyId;
 

Я пытаюсь написать этот код на C#, .NET 4.7.2 (я не могу изменить версию).
Это мой код:

 using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace HttpClientSample
{
    class Program
    {
        static HttpClient client = new HttpClient();

        static void Main()
        {
            RunAsync().GetAwaiter().GetResult();
        }

        static async Task RunAsync()
        {
            try
            {

                client.BaseAddress = new Uri("https://authservices.satispay.com/g_business/v1/authentication_keys");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                var req = new HttpRequestMessage(HttpMethod.Post, "https://authservices.satispay.com/g_business/v1/authentication_keys");
                req.Content = new FormUrlEncodedContent(new Dictionary<string, string>
                {
                    { "public_key", "-----BEGIN PUBLIC KEY-----"                                     "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwsXec0YvxKmuGZTtwy4E"                                     "/U6zxxt1 iG2N31eqNr5Er0iGTg1kMJpfTeZdWAvDx31azyFjphl91ptUuiCzaqB" 
                                    "ZlPPK4beSmCMuz2EkKEklJ5/4U2OBr9Y/e4QseqYzO3tF2ZveQKqXISDW4 LXjw6"                                     "2IYK3JZoFhI3ZJD E2h5Korr3zgYjthiKOjD18seBOlf2P2vzBzZU847zEPk4ybY"                                     "kdultlLdp0h5brFC/hL23lT8L4oLrVfn3cW8A8adn8moo5NGPh6DOeTl NHYHgKw"                                     "72ntVebeyyIFiTqOE17 UIzKQ3rgu3ABWVHlAr LZhdXG3Sd1uMNFmRhdBZw671t" 
                                    "oARh1Le3E2ln1/44d3lEfZijS3i9nmJU KCwiKbrXGb4fqQUnk/SueM BUzIzE3 "                                     "5aMvq0WXLEG ognRCHHfUG2/DmJU9sRUITFK1kzmtC1Y64hQC4o2QlRAqSfx1nTL"                                     "6J9OOLhsv HZv8ypEwz2JNEVqF8gMTpuyVC/u4h1ILm68VAhy23mplZhW4rsUKok"                                     "Z694mxlPDIs3mxn7sKS/tcW5 StzQrCtFX ocb2f86tyIhungZo5pRFDiC9wTGbg"                                     "OxWoGu03cfPX8LdjxNIR2bONzB7Idmvdr5eGsogx2R92QXJJg/GJPeN18Qt3X vN" 
                                    "UEAyUerzvFMmbZllSKkOXdsCAwEAAQ==" 
                                    "-----END PUBLIC KEY-----" },
                    { "token", "M8VCDG" }
                });

                string s = "";
                HttpResponseMessage response = await client.SendAsync(req);
                //HttpResponseMessage response = await client.GetAsync(req);
                if (response.IsSuccessStatusCode)
                {
                    s = await response.Content.ReadAsAsync<String>();
                    Console.WriteLine($"s = '{s}'");
                }
                else
                    Console.WriteLine(response.ReasonPhrase);                
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            Console.ReadLine();
        }
    }
}
 

Конечно, это СОВСЕМ НЕ работает:
когда я пытаюсь с

 var req = new HttpRequestMessage(HttpMethod.Post, error is "Unsopported Media Type"
var req = new HttpRequestMessage(HttpMethod.Get, error is "Can't send content with this verb"
 

Кто-нибудь может помочь?

Комментарии:

1. Ваш cURL отправляет JSON, в то время как c# отправляет данные URL-адреса формы. Вы можете довольно легко отправлять JSON с помощью HttpClient, вы уже должны найти множество примеров в Интернете