#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, вы уже должны найти множество примеров в Интернете