Je n'aurais pas à ajouter de nom, ou le message d'erreur serait plus clair qu'un nom de paramètre manquait.
Une NullReferenceException est levée.
Cela doit être le problème dans RestClient.ConfigureHttp (en supposant que le nom est là):
var parameterExists =
request.Parameters.Any(p =>
p.Name.Equals(defaultParameter.Name, StringComparison.InvariantCultureIgnoreCase)
&& p.Type == defaultParameter.Type);
System.NullReferenceException : référence d'objet non définie sur une instance d'un objet.
à RestSharp.RestClient.<>c__DisplayClass172_0.
à System.Linq.Enumerable.Any TSource
à RestSharp.RestClient.ConfigureHttp (demande IRestRequest)
à RestSharp.RestClient.ExecuteAsync (demande IRestRequest, action 2 callback, String httpMethod, Func
4 getWebRequest)
à RestSharp.RestClient.ExecuteAsync (demande IRestRequest, rappel Action`2, méthode httpMethod)
@vbenedichuk une raison pour laquelle vous ne voulez pas soumettre de PR ?
Fermé dans la prochaine version. Changement de rupture !
J'essayais de déboguer/réparer un problème, mais j'ai découvert que votre modification introduisait un bogue. Voir la ligne https://github.com/restsharp/RestSharp/blob/a8a9f3473be30317fc449c1c47e3f3cd74e8bab4/RestSharp/RestRequest.cs#L335
Vous verrez que la ligne met à jour un objet mais ne fournit pas de nom requis par la validation :
Demande de tirage soumise :
https://github.com/restsharp/RestSharp/pull/1337
On dirait qu'il nous manque des tests. En effet, les paramètres du corps n'ont pas besoin de nom. Je pense qu'un meilleur correctif ne vérifierait que si le nom n'est pas vide pour les paramètres qui ne sont pas de type body.
J'ai mis à jour la demande de tirage pour refléter votre idée.
J'ai seulement attrapé ce problème parce que j'essayais de mieux comprendre RestSharp. Cela ne semble pas être un problème dans le package nuget pour le moment.
Oui, la nouvelle version n'est pas encore publiée. J'ai apporté quelques modifications supplémentaires en préparation pour passer à une meilleure gestion asynchrone et également pour résoudre certains des problèmes liés à la gestion des exceptions
quand sera-t-il réparé ?
Je peux voir qu'il y a la version 106.7.0 mais mon studio visuel n'affiche que 106.6.10 pourquoi ?
Corrigé en 106,9
Cela reste un problème dans la dernière version Alexey
@ronaldfeb J'ai fusionné le PR qui prétendait résoudre ce problème, pourriez-vous s'il vous plaît publier votre code ?
@alexeyzimarev j'ai juste une fonction post simple qui prend un objet JSON comme corps. Le paramètre de nom pour le corps est 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 });
}
Le corps du json :
{
"smartloadId": "string",
"clientReference": "string",
"smsRecipientMsisdn": "string",
"deviceId": "string",
"productId": 0,
"amount": 0,
"pinless": true,
"sendSms": true,
"orderRefID": 0
}
Pourriez-vous coller les détails de l'exception, y compris la trace de la pile ?
@alexeyzimarev (Corrigé en 106.9)
Ma version RestSharp (106.10.1)
Inscription MemberSignUp = nouveau MemberSignUp()
{
E-mail = "TEST",
Pseudo = "TEST",
} ;
RestRequest req = new RestRequest("/my/resource", Method.POST);
req.AlwaysMultipartFormData = true;
req.AddHeader("content-Type", "multipart/form-data");
req.AddJsonBody(signup);
mais -> req.Parameters[1].Name = est vide.
comment définir le nom du paramètre lorsque je req.AddJsonBody()
j'ai une erreur similaire
Code
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);
Erreur
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)
J'ai essayé sur différentes versions : 106.10.1, 106.10.0б, 106.9.0
Avec une apparence d'url fonctionne bien
"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 c'est un problème différent, veuillez en ouvrir un séparé
Ok, le problème du paramètre du corps de la requête nécessitant d'avoir un nom est _fixe_. S'il y a d'autres problèmes avec le nom du paramètre étant nul, veuillez ouvrir un problème séparé.
Comment avez-vous ajouté une modification avec rupture (supprimer le constructeur sans paramètre de la classe Parameter) sans changer la version majeure ?
J'ai essayé de mettre à jour de 106.2.1 vers la dernière version, en supposant que s'il a le même majeur (106) sans casser les changements mais PAS !
@bsalmeida comme ça. Idéalement, la classe de paramètres doit être interne. Nous ne pouvons pas accepter les paramètres qui ne sont pas configurés correctement car cela crée plus de problèmes que les gens publient ici.