Мне не нужно было бы добавлять имя, иначе сообщение об ошибке было бы более ясным, что имя параметра отсутствует.
Выбрасывается исключение NullReferenceException.
Это должно быть проблема в RestClient.ConfigureHttp (предполагается, что имя есть):
var parameterExists =
request.Parameters.Any(p =>
p.Name.Equals(defaultParameter.Name, StringComparison.InvariantCultureIgnoreCase)
&& p.Type == defaultParameter.Type);
System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
в RestSharp.RestClient. <> c__DisplayClass172_0.
в 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)
@vbenedichuk есть ли причина, по которой вы не хотите
Закрыт в следующем выпуске. Критическое изменение!
Я пытался отладить / исправить проблему, но обнаружил, что ваше изменение привело к ошибке. См. Строку https://github.com/restsharp/RestSharp/blob/a8a9f3473be30317fc449c1c47e3f3cd74e8bab4/RestSharp/RestRequest.cs#L335
Вы увидите, что строка обновляет объект, но не предоставляет имя, требуемое для проверки:
Отправленный запрос на перенос:
https://github.com/restsharp/RestSharp/pull/1337
Похоже, нам не хватает некоторых тестов. Действительно, параметры тела не нуждаются в имени. Я думаю, что лучшим исправлением будет проверка только того, не является ли имя пустым для параметров, не относящихся к типу body.
Я обновил пулреквест, чтобы отразить вашу идею.
Я поймал эту проблему только потому, что пытался лучше понять RestSharp. В настоящее время это не проблема в пакете nuget.
Да, новая версия еще не опубликована. Я внес еще несколько изменений в подготовку к переходу к лучшей асинхронной обработке, а также для решения некоторых проблем с обработкой исключений.
когда это будет исправлено?
Я вижу, что есть версия 106.7.0, но моя визуальная студия показывает только 106.6.10, почему?
Исправлено в 106.9
Это остается проблемой в последней сборке Alexey
@ronaldfeb Я объединил PR, который утверждал, что
@alexeyzimarev у меня просто есть простая функция post, которая принимает объект JSON в качестве тела. Параметр имени для тела имеет значение NULL.
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)
Моя версия RestSharp (106.10.1)
Регистрация MemberSignUp = новый MemberSignUp ()
{
Email = "ТЕСТ",
NickName = "ТЕСТ",
};
RestRequest req = новый RestRequest ("/ мой / ресурс", Method.POST);
req.AlwaysMultipartFormData = true;
req.AddHeader("content-Type", "multipart/form-data");
req.AddJsonBody(signup);
но -> req.Parameters [1] .Name = пусто.
как установить имя параметра, когда я req.AddJsonBody ()
У меня похожая ошибка
Код
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"
@veliev это другой вопрос, откройте отдельный
Хорошо, проблема с параметром тела запроса, требующим наличия имени, _ исправлена_. Если возникнут другие проблемы с нулевым именем параметра, пожалуйста, откройте отдельный вопрос.
Как вы добавили критическое изменение (удалили конструктор без параметров класса Parameter) без изменения основной версии?
Я пробовал обновиться с 106.2.1 до последней версии, предполагая, что если у него такой же основной (106), без критических изменений, но НЕ!
@bsalmeida нравится. В идеале класс параметров должен быть внутренним. Мы не можем принять параметры, которые настроены неправильно, поскольку это создает больше проблем, которые люди публикуют здесь.