Restsharp: NullReferenceException para parâmetros do corpo que não têm um nome

Criado em 5 abr. 2019  ·  20Comentários  ·  Fonte: restsharp/RestSharp

Comportamento esperado

Eu não precisaria adicionar um nome, ou a mensagem de erro ficaria mais clara, informando que um nome de parâmetro estava faltando.

Comportamento Real

Uma NullReferenceException é lançada.

Etapas para reproduzir o problema

  1. Adicionar um parâmetro de corpo de solicitação sem um nome

Esse deve ser o problema em RestClient.ConfigureHttp (presume-se que o nome esteja lá):

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

Especificações

  • Versão: 106.6.9.0
  • Plataforma: .NET Framework
  • Subsistema:

StackTrace


System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.
em RestSharp.RestClient. <> c__DisplayClass172_0.b__8 (Parâmetro p)
em System.Linq.Enumerable.Any TSource
em RestSharp.RestClient.ConfigureHttp (solicitação IRestRequest)
em RestSharp.RestClient.ExecuteAsync (solicitação IRestRequest, Ação 2 callback, String httpMethod, Func 4 getWebRequest)
em RestSharp.RestClient.ExecuteAsync (solicitação IRestRequest, callback Action`2, Método httpMethod)

Todos 20 comentários

@vbenedichuk alguma razão pela qual você não deseja enviar um PR?

Fechado no próximo lançamento. Quebrando a mudança!

Parece que faltam alguns testes. Na verdade, os parâmetros do corpo não precisam de um nome. Eu acho que uma correção melhor seria apenas verificar se o nome não está vazio para parâmetros que não são do tipo body.

Eu atualizei a solicitação de pull para refletir sua ideia.

Eu só peguei esse problema porque estava tentando entender melhor o RestSharp. Não parece ser um problema no pacote nuget neste momento.

Sim, a nova versão ainda não foi publicada. Fiz mais algumas alterações na preparação para mudar para um melhor tratamento assíncrono e também para resolver alguns dos problemas com o tratamento de exceções

quando será consertado?

Eu posso ver que existe a versão 106.7.0, mas meu estúdio visual mostra apenas 106.6.10 por quê?

Fixo em 106,9

Este continua a ser um problema na última compilação Alexey

@ronaldfeb Eu

@alexeyzimarev eu só tenho uma função post simples que leva um objeto JSON como o corpo. O parâmetro de nome para o corpo é nulo.

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

O corpo json:

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

Você poderia colar os detalhes da exceção, incluindo o rastreamento de pilha?

@alexeyzimarev (corrigido em 106.9)
Minha versão RestSharp (106.10.1)

MemberSignUp signup = new MemberSignUp ()
{
Email = "TESTE",
NickName = "TESTE",
};
RestRequest req = new RestRequest ("/ meu / recurso", Método.POST);

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

mas -> req.Parameters [1] .Name = está vazio.

como definir o nome do parâmetro quando i req.AddJsonBody ()

image

Eu tenho um erro semelhante
Código

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

Erro

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)

Tentei em diferentes versões: 106.10.1, 106.10.0б, 106.9.0
Com um url parece funcionar bem

"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 é um problema diferente, por favor, abra outro

Ok, o problema do parâmetro do corpo da solicitação que exige um nome é _fixado_. Se houver qualquer outro problema com o nome do parâmetro sendo nulo, abra um problema separado.

Como você adicionou uma alteração significativa (remove o construtor sem parâmetros da classe Parameter) sem alterar a versão principal?
Eu tentei atualizar de 106.2.1 para a versão mais recente, supondo que se ele tem o mesmo principal (106) sem interromper as alterações, mas NÃO!

@bsalmeida assim. Idealmente, a classe de parâmetro deve ser interna. Não podemos aceitar parâmetros que não estejam configurados corretamente, pois isso cria mais problemas que as pessoas postam aqui.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mwinder picture mwinder  ·  7Comentários

guevelamax15000 picture guevelamax15000  ·  3Comentários

captnrob picture captnrob  ·  3Comentários

vDeggial picture vDeggial  ·  6Comentários

ChenJasonGit picture ChenJasonGit  ·  5Comentários