Restsharp: NullReferenceException لمعلمات الجسم التي ليس لها اسم

تم إنشاؤها على ٥ أبريل ٢٠١٩  ·  20تعليقات  ·  مصدر: restsharp/RestSharp

سلوك متوقع

لن أضطر إلى إضافة اسم ، أو ستكون رسالة الخطأ أوضح أن اسم المعلمة مفقود.

السلوك الفعلي

تم طرح NullReferenceException.

خطوات إعادة إظهار المشكلة

  1. أضف معلمة نص طلب بدون اسم

يجب أن تكون هذه هي المشكلة في RestClient.ConfigureHttp (من المفترض أن الاسم موجود):

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

تحديد

  • الإصدار: 106.6.9.0
  • النظام الأساسي: .NET Framework
  • النظام الفرعي:

تتبع المكدس


System.NullReferenceException: لم يتم تعيين مرجع الكائن على مثيل لكائن.
في RestSharp.RestClient. <> c__DisplayClass172_0.b__8 (المعلمة p)
في System.Linq.Enumerable.Any TSource
في RestSharp.RestClient.ConfigureHttp (طلب IRestRequest)
في RestSharp.RestClient.ExecuteAsync (طلب IRestRequest ، الإجراء 2 callback, String httpMethod, Func 4 getWebRequest)
في RestSharp.RestClient.ExecuteAsync (طلب IRestRequest ، رد الاتصال Action`2 ، طريقة httpMethod)

ال 20 كومينتر

vbenedichuk هل يوجد سبب لعدم رغبتك في تقديم العلاقات العامة؟

مغلق في الإصدار القادم. كسر التغيير!

كنت أحاول تصحيح / تصحيح مشكلة لكنني اكتشفت أن التغيير الذي أجريته أدى إلى حدوث خطأ. انظر السطر https://github.com/restsharp/RestSharp/blob/a8a9f3473be30317fc449c1c47e3f3cd74e8bab4/RestSharp/RestRequest.cs#L335

ستلاحظ أن السطر يقوم بجديد كائن ولكن لا يقدم اسمًا مطلوبًا من خلال التحقق من الصحة:

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

طلب السحب المقدم:
https://github.com/restsharp/RestSharp/pull/1337

يبدو أننا نفتقد بعض الاختبارات. في الواقع لا تحتاج معلمات الجسم إلى اسم. أعتقد أن الإصلاح الأفضل سيتحقق فقط مما إذا كان الاسم ليس فارغًا للمعلمات التي ليست من نوع الجسم.

لقد قمت بتحديث طلب السحب ليعكس فكرتك.

لقد اكتشفت هذه المشكلة فقط لأنني كنت أحاول فهم RestSharp بشكل أفضل. لا يبدو أن هناك مشكلة في حزمة nuget في هذا الوقت.

نعم ، لم يتم نشر الإصدار الجديد بعد. لقد أجريت بعض التغييرات الإضافية استعدادًا للانتقال إلى معالجة غير متزامنة بشكل أفضل وأيضًا لمعالجة بعض المشكلات المتعلقة بمعالجة الاستثناءات

متى سيتم إصلاحه؟

أستطيع أن أرى أن هناك إصدار 106.7.0 لكن الاستوديو المرئي الخاص بي يظهر فقط 106.6.10 لماذا؟

ثابت في 106.9

تظل هذه مشكلة في أحدث إصدار من Alexey

ronaldfeb قمت بدمج العلاقات العامة التي تدعي إصلاح هذه المشكلة ، هل يمكنك من فضلك نشر الكود الخاص بك؟

alexeyzimarev لديّ فقط وظيفة نشر بسيطة تأخذ كائن JSON كجسم. معلمة الاسم للجسم خالية.

        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 });
        }

هيئة json:

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

هل يمكنك لصق تفاصيل الاستثناء ، بما في ذلك تتبع المكدس؟

alexeyzimarev (ثابت في 106.9)
إصدار My RestSharp (106.10.1)

اشتراك MemberSignUp = New MemberSignUp ()
{
Email = "TEST" ،
الاسم المستعار = "اختبار" ،
} ؛
RestRequest req = new RestRequest ("/ my / Resource"، Method.POST)؛

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

لكن -> req.Parameters [1] .Name = فارغ.

كيفية تعيين اسم المعامل عند طلب iq.AddJsonBody ()

image

لدي خطأ مماثل
رمز

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);

خطأ

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)

جربت إصدارات مختلفة: 106.10.1 ، 106.10.0б ، 106.9.0
مع وجود عنوان url يعمل بشكل جيد

"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"

فيليف @ أنها مشكلة مختلفة ، يرجى فتح واحدة منفصلة

حسنًا ، مشكلة معلمة نص الطلب التي تتطلب الحصول على اسم هي _ ثابت_. إذا كانت هناك أية مشكلات أخرى مع كون اسم المعلمة فارغًا ، فيرجى فتح مشكلة منفصلة.

كيف أضفت تغييرًا فاصلًا (إزالة المُنشئ بدون معلمات لفئة Parameter) دون تغيير الإصدار الرئيسي؟
لقد حاولت التحديث من 106.2.1 إلى أحدث إصدار ، على افتراض أنه إذا كان له نفس التخصص الرئيسي (106) دون تغيير التغييرات ولكن ليس!

bsalmeida من هذا القبيل. من الناحية المثالية ، يجب أن تكون فئة المعلمة داخلية. لا يمكننا قبول المعلمات التي لم يتم تكوينها بشكل صحيح لأنها تخلق المزيد من المشكلات التي ينشرها الأشخاص هنا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

stricq picture stricq  ·  6تعليقات

nilesh-shah picture nilesh-shah  ·  6تعليقات

tomgallard picture tomgallard  ·  6تعليقات

wojciechrak picture wojciechrak  ·  3تعليقات

nilsga picture nilsga  ·  5تعليقات