Member 14779968 Ответов: 1

Могу ли я использовать словарь для добавления параметров запроса в restsharp в метод addqueryparameter?


У меня есть свой метод sendRequest, в котором я передаю свои параметры contentType, token и query.
Я использовал словарь<string, string> Для моих параметров запроса, но я получаю ошибку. Он показывает, что AddQueryParameter принимает строковое имя, строковое значение, поэтому я не понимаю, почему он не может принять словарь. Ошибка, которую я получаю
"Нет перегрузки для метода AddQueryParameter"


И моя просьба тоже.Метод addparameter получаю сообщение об ошибке здесь "использования присваивается локальной переменной ООН". Должен ли я присвоить переменной запроса IRestRequest значение = null. Разве это не вызовет исключение nullpointerexception?


Вот что у меня есть
private static IRestRequest sendRequest(string contentType, string token, Dictionary<string, string> paramsMap)
        {
            IRestRequest request;

           //if token is null no need to add the token. Some request requires token, 
            Some does not

            if (token != null)
            {
                request.AddParameter("Authorization", "Bearer" + token, 
                      ParameterType.HttpHeader);

            }

            if (!(paramsMap == null))
            {   
                request.AddQueryParameter(paramsMap);
            }

           

           if (contentType != null) //if contentType is not null then add content type
            {
                if (contentType.Equals("JSON"))
                {
                    request.AddHeader("Accept", "application/json");
                }
                else if (contentType.Equals("XML"))
                {
                    request.AddHeader("Accept", "application/xml");
                }
                else if (contentType.Equals("TEXT"))
                {
                    request.AddHeader("Accept", "text/plain");
                }
            }

            return request;
        }


Что я уже пробовал:

private static IRestRequest sendRequest(string contentType, string token, Dictionary<string, string> paramsMap)
        {
         IRestRequest request = null; //this may solve my local request variable problem

           //if token is null no need to add the token. Some request requires token, 
            Some does not

            if (token != null)
            {
                request.AddParameter("Authorization", "Bearer" + token, 
                      ParameterType.HttpHeader);

            }

            if (!(paramsMap == null))
            {   
                request.AddQueryParameter(paramsMap);
            }

           

           if (contentType != null) //if contentType is not null then add content type
            {
                if (contentType.Equals("JSON"))
                {
                    request.AddHeader("Accept", "application/json");
                }
                else if (contentType.Equals("XML"))
                {
                    request.AddHeader("Accept", "application/xml");
                }
                else if (contentType.Equals("TEXT"))
                {
                    request.AddHeader("Accept", "text/plain");
                }
            }

            return request;
        }

1 Ответов

Рейтинг:
1

Richard Deeming

Вы пытаетесь вызвать метод, который принимает две строки, но вы пытаетесь передать Dictionary<string, string>.

Компьютеры не просто "угадывают", что вы хотели сделать; они делают именно то, что вы им говорите. Если вы скажете ему вызвать метод называется AddQueryParameter проходя в а Dictionary<string, string>, компьютер будет - правильно - сказать вам, что нет такого метода.

Вам нужно перебрать значения в словаре и добавить их отдельно:

if (paramsMap != null)
{
    foreach (KeyValuePair<string, string> pair in paramsMap)
    {
        request.AddQueryParameter(pair.Key, pair.Value);
    }
}


Вы получаете "неназначенная локальная переменная" ошибка из-за того, что вы не присвоили значение request параметр. И нет, вы не можете установить его на null, потому что тогда вы получите NullReferenceException во время выполнения. Вам нужно создать новый экземпляр запроса и сохранить его в этой переменной, прежде чем пытаться что-либо сделать с этой переменной.