Saya sedang mengerjakan integrasi dengan Pembayaran Alternatif menggunakan integrasi laman yang dihosting. C# SDK mereka tidak memiliki integrasi ini saat ini, tetapi seperti yang Anda lihat, ini cukup sederhana dan saya membuat kelas kecil untuk mengirim permintaan posting dan mendapatkan respons JSON.
Saya menguji objek json yang saya kirim di PostMan dan cURL dan keduanya berfungsi, juga header otentikasi, jadi menurut saya itu bukan masalahnya. Inilah konstruktor kelas saya:
public AlternativePaymentsCli(string apiSecretKey)
{
this._apiSecretKey = apiSecretKey;
_httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var authInfo = _apiSecretKey;
authInfo = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:", _apiSecretKey)));
// The two line below because I saw in an answer on stackoverflow.
_httpClient.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
_httpClient.DefaultRequestHeaders.Add("Keep-Alive", "3600");
_httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Anything.com custom client v1.0");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authInfo);
}
Dan metode saya memposting data:
public string CreateHostedPageTransaction(HostedPageRequest req)
{
var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
// I send this same json content on PostMan and it works. The json is not the problem
var content = new StringContent(JsonConvert.SerializeObject(req, settings), Encoding.UTF8, "application/json");
var response = _httpClient.PostAsync(this._baseUrl + "/transactions/hosted", content).Result;
var responseText = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
if (response.IsSuccessStatusCode)
return responseText;
return "";
}
Lalu saya mendapatkan kesalahan ini: An existing connection was forcibly closed by the remote host
, di baris PostAsync. Ini rincian kesalahannya:
[SocketException (0x2746): An existing connection was forcibly closed by the remote host]
System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult) +8192811
System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult) +47
[IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.]
System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) +294
System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar) +149
[WebException: The underlying connection was closed: An unexpected error occurred on a send.]
System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context) +324
System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar) +137
[HttpRequestException: An error occurred while sending the request.]
Saya menggunakan C# 4.5, Asp.Net MVC. Saya telah membaca jawaban untuk kesalahan yang sama dan sejauh ini tidak ada satupun yang menyelesaikan masalah saya. Apa yang saya lewatkan dalam kode ini?
Terima kasih atas bantuannya
var
untuk segala hal akan membuat rekan kerja Anda membenci Anda. Hanya gunakanvar
jika jenisnya jelas (misalnyavar date = new DateTime();
) sangat jelas merupakanDateTime
. Namunvar response = _httpClient.PostAsync(this._baseUrl + "/transactions/hosted", content).Result;
tidak jelas karena.Result
adalah properti dan tidak tersirat jenisnya. - person maccettura   schedule 14.09.2017var
membuat kode lebih bersih. Tidak ada ambiguitas tentang jenisnya kecuali Anda menulis metode yang sangat panjang, dalam hal ini Anda harus benar-benar memisahkannya. Rekan kerja akan membenci Anda jika Anda menulis metode yang terlalu panjang sehingga mereka tidak dapat melihat jenisnya - person Panagiotis Kanavos   schedule 14.09.2017var
hanya membuat kode lebih bersih ketika tipenya tersirat, menggunakanvar
di mana pun (bahkan dalam kasus di mana tipenya tidak tersirat) hanyalah pemrograman yang buruk. - person maccettura   schedule 14.09.2017.Result
, rekan kerja akan membenci siapa pun yang memblokir panggilan asinkron dengan.Wait()
atau.Result
. Tipe pengembaliannya tetap diketahui. Ini adalah HttpResponseMessage. Melihat namanya tidak akan membantu Anda karena Anda tetap harus menggunakan intellisense untuk menemukan metode mana yang akan digunakan - person Panagiotis Kanavos   schedule 14.09.2017.Result
akan menimbulkan kekhawatiran siapa pun - person Panagiotis Kanavos   schedule 14.09.2017