Restsharp: NullReferenceException untuk parameter tubuh yang tidak memiliki nama

Dibuat pada 5 Apr 2019  ·  20Komentar  ·  Sumber: restsharp/RestSharp

Perilaku yang Diharapkan

Saya tidak perlu menambahkan nama, atau pesan kesalahan akan lebih jelas bahwa nama parameter tidak ada.

Perilaku Sebenarnya

NullReferenceException dilempar.

Langkah-langkah untuk Mereproduksi Masalah

  1. Tambahkan parameter badan permintaan tanpa nama

Ini pasti masalah di RestClient.ConfigureHttp (dengan asumsi namanya ada di sana):

var parameterExists =
                    request.Parameters.Any(p =>
                        p.Name.Equals(defaultParameter.Name, StringComparison.InvariantCultureIgnoreCase)
                        && p.Type == defaultParameter.Type);

spesifikasi

  • Versi: 106.6.9.0
  • Platform: .NET Framework
  • Subsistem:

Jejak Tumpukan


System.NullReferenceException: Referensi objek tidak disetel ke instance objek.
di RestSharp.RestClient.<>c__DisplayClass172_0.b__8(Parameter p)
di System.Linq.Enumerable.Any TSource
di RestSharp.RestClient.ConfigureHttp (permintaan IRestRequest)
di RestSharp.RestClient.ExecuteAsync(permintaan IRestRequest, Tindakan 2 callback, String httpMethod, Func 4 getWebRequest)
di RestSharp.RestClient.ExecuteAsync(permintaan IRestRequest, panggilan balik Action`2, Metode httpMethod)

Semua 20 komentar

@vbenedichuk ada alasan mengapa Anda tidak ingin mengirimkan PR?

Ditutup pada rilis berikutnya. Melanggar perubahan!

Saya mencoba untuk men-debug/memperbaiki masalah tetapi ternyata perubahan Anda menimbulkan bug. Lihat baris https://github.com/restsharp/RestSharp/blob/a8a9f3473be30317fc449c1c47e3f3cd74e8bab4/RestSharp/RestRequest.cs#L335

Anda akan melihat bahwa baris sedang memperbarui objek tetapi tidak memberikan nama yang diperlukan oleh validasi:

https://github.com/restsharp/RestSharp/blob/a8a9f3473be30317fc449c1c47e3f3cd74e8bab4/RestSharp/Parameter.cs#L28 -L35

https://github.com/restsharp/RestSharp/blob/a8a9f3473be30317fc449c1c47e3f3cd74e8bab4/RestSharp/Validation/Ensure.cs#L13 -L17

Permintaan tarik yang diajukan:
https://github.com/restsharp/RestSharp/pull/1337

Sepertinya kita melewatkan beberapa tes. Memang parameter tubuh tidak perlu nama. Saya pikir perbaikan yang lebih baik hanya akan memeriksa apakah namanya tidak kosong untuk parameter yang bukan tipe badan.

Saya memperbarui permintaan tarik untuk mencerminkan ide Anda.

Saya hanya menangkap masalah ini karena saya mencoba memahami RestSharp dengan lebih baik. Tampaknya tidak menjadi masalah dalam paket nuget saat ini.

Ya, versi baru belum diterbitkan. Saya membuat beberapa perubahan lagi sebagai persiapan untuk beralih ke penanganan asinkron yang lebih baik dan juga untuk mengatasi beberapa masalah dengan penanganan pengecualian

kapan akan diperbaiki?

Saya dapat melihat bahwa ada versi 106.7.0 tetapi studio visual saya hanya menampilkan 106.6.10 mengapa?

Tetap di 106.9

Ini tetap menjadi masalah di Alexey build terbaru

@ronaldfeb Saya menggabungkan PR yang diklaim untuk memperbaiki masalah ini, bisakah Anda memposting kode Anda?

@alexeyzimarev saya hanya memiliki fungsi posting sederhana yang mengambil objek JSON sebagai badan. Parameter nama untuk badan adalah nol.

        public async Task<Result> postAsync(object objectToUpdate, string apiEndPoint)
        {
            Result result = new Result();

            try
            {
                var client = new RestClient(apiEndPoint);

                var request = new RestRequest(apiEndPoint, Method.POST);
                request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
                request.RequestFormat = DataFormat.Json;
                request.AddJsonBody(objectToUpdate);
                var response = await client.ExecuteTaskAsync(request);
                //var response = client.ExecuteDynamic(request);


                if (response.StatusCode != HttpStatusCode.Created)
                {

                    Console.WriteLine("Access Token cannot obtain, process terminate");
                    result.Success = false;
                    result.Message = response.ErrorMessage;
                    return result;

                }

                result.Success = true;
                result.Message = "OK";
                return result;

            }
            catch
            {
                throw;
            }

            // await Audit(_settings, new AuditEntry() { Action = EnumTypes.Actions.Add.ToString(), Area = "Testcase", AuditId = obj.key, DatetimeStamp = DateTime.Now, ClientId = userId, NewValue = obj, OldValue = null });
        }

Tubuh json:

{
  "smartloadId": "string",
  "clientReference": "string",
  "smsRecipientMsisdn": "string",
  "deviceId": "string",
  "productId": 0,
  "amount": 0,
  "pinless": true,
  "sendSms": true,
  "orderRefID": 0
}

Bisakah Anda menempelkan detail pengecualian, termasuk jejak tumpukan?

@alexeyzimarev (Tetap di 106.9)
Versi RestSharp Saya (106.10.1)

Pendaftaran MemberSignUp = MemberSignUp baru()
{
Email = "UJI",
Nama Panggilan = "UJI",
};
RestRequest req = new RestRequest("/my/resource", Method.POST);

        req.AlwaysMultipartFormData = true;
        req.AddHeader("content-Type", "multipart/form-data");
        req.AddJsonBody(signup);

tapi -> req.Parameters[1].Name = kosong.

cara mengatur nama parameter ketika saya req.AddJsonBody()

image

Saya memiliki kesalahan serupa
Kode

string url = "http://????????????????????????????/reports/new/Report2_11_1?page=reports/new/Report2_11_1&rep_nd=04.03.2020&rep_nd_h=18&rep_nd_min=00&rep_kd=05.03.2020&rep_kd_h=18&rep_kd_min=00&&rep_nd_fact_time=&rep_nd_h_fact_time=00&rep_nd_min_fact_time=00&rep_kd_fact_time=&rep_kd_h_fact_time=00&rep_kd_min_fact_time=00&train_registration=1&kind_rep_type=1,2&four_report_save=4,5&usw=1007&ush=1108";
CookieContainer container = new CookieContainer();
RestClient client = new RestClient();
client.CookieContainer = container;

RestRequest request = new RestRequest(url, Method.GET);

Kesalahan

Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'name')
   at RestSharp.RestRequest..ctor(String resource, Method method, DataFormat dataFormat)
   at RestSharp.RestRequest..ctor(String resource, Method method)

Saya mencoba pada versi yang berbeda: 106.10.1, 106.10.0б, 106.9.0
Dengan url yang tampaknya berfungsi dengan baik

"http://????????????????????????????/reports/new/Report2_1_1?page=reports/new/Report2_1_1&rep_nd=01.01.2019&rep_nd_h=0
0&rep_nd_min=00&rep_kd=05.03.2019&rep_kd_h=23&rep_kd_min=59&rep_status=0,1,2,4,5,6,7,10&state_among_road=close&rep_stat
us_among_road=0,1,2,4,6,7,10&rep_flg_add_inv=0&rep_flg_add_inv_among=0&rep_conseq=null&rep_character=null&kind_rep_type
=3&rep_service=null&rep_subdivision=null&rep_nod0=null&rep_place0=null&rep_place0_id=null&rep_stan0_1_id=null&rep_stan0
_2_id=null&rep_place0_value=null&rep_object=null&nod_place=null&rep_asu=0,1,2,5,7,11,12,14,15,20,21&rep_asu_dop=1:1&flg
_alien_service=2&usw=1578&ush=705"

@veliev itu masalah yang berbeda, silakan buka yang terpisah

Oke, masalah parameter badan permintaan yang membutuhkan nama adalah _fixed_. Jika ada masalah lain dengan nama parameter menjadi nol, silakan buka masalah terpisah.

Bagaimana Anda menambahkan perubahan yang melanggar (menghapus konstruktor tanpa parameter dari kelas Parameter) tanpa mengubah versi utama?
Saya sudah mencoba memperbarui dari 106.2.1 ke versi terbaru, dengan asumsi bahwa jika memiliki mayor yang sama (106) tanpa merusak perubahan tetapi TIDAK!

@bsalmeida seperti itu. Idealnya, kelas parameter harus internal. Kami tidak dapat menerima parameter yang tidak dikonfigurasi dengan benar karena hal itu menciptakan lebih banyak masalah yang diposting orang di sini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ChenJasonGit picture ChenJasonGit  ·  5Komentar

AlexanderSchoenfeld picture AlexanderSchoenfeld  ·  3Komentar

weswitt picture weswitt  ·  3Komentar

mjwsteenbergen picture mjwsteenbergen  ·  5Komentar

wojciechrak picture wojciechrak  ·  3Komentar