Как передать x-APi-ключ используя остальное Sharp - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь отправить ключ API в качестве заголовка в Rest Остро, Это то, что я пытаюсь,

Я получаю {"status":403,"message":"Forbidden"}

public static IRestResponse CreateNewUser(string enviroment, string email, string password)
        {
            NameValueCollection Env = ValidateEnv(enviroment);
            string baseurlenv = Env["baseApiURL"];
            var enviroments = new EndPointProviders();
            var Client = new RestClient();
            Client.BaseUrl = new Uri(baseurlenv);
            var request = new RestRequest(Method.POST);
            request.Resource = string.Format("/v3/members/email={0}&password={1}&terms_and_conditions=true", email, password);
            request.AddHeader("x-api-key", "yxyxyxyx");
            request.AddHeader("content-type", "application/x-www-form-urlencoded");
            IRestResponse response = Client.Execute(request);
            Console.WriteLine(request);
            if (!IsReturnedStatusCodeOK(response))
            {
                throw new HttpRequestException("Request issue -> HTTP code:" + response.StatusCode);
            }
            return response;

        }

Мне удалось получить то же самоезапрос в Python, который прекрасно работает, как я могу сделать то же самое в Rest Sharp?

import requests

# Create User/

headers = {
    'Host': 'host..',
    'x-api-key': 'yxyxyxyx',
    'content-type': 'application/x-www-form-urlencoded',
}

data = 'email=example18@gmail.com&password=example1&terms_and_conditions=true'

response = requests.post('https://sampeurl/v3/members', headers=headers, data=data)


print(response.content)

Ответы [ 2 ]

1 голос
/ 12 марта 2019

похоже, у вас есть ошибка в вашем C #, которая уже была указана вам, но она должна быть members?email, а не members/email Если вы работаете с AWS Api Gateways, последний будет регистрироваться как совершенно другая конечная точка, и это может вызвать у вас всевозможные странные коды состояния, а 403 может быть действительно приемлемым в этом случае.

Далее, вместо добавления параметров в URL, как вы, я бы использовал следующий метод:

request.AddParameter(string name, string value);

пример из того, что вы написали выше, будет

public static IRestResponse CreateNewUser(string enviroment, string email, string password)
        {
            NameValueCollection Env = ValidateEnv(enviroment);
            string baseurlenv = Env["baseApiURL"];
            var enviroments = new EndPointProviders();
            var Client = new RestClient();
            Client.BaseUrl = new Uri(baseurlenv);
            var request = new RestRequest(Method.POST);

            // Resource should just be the path
            request.Resource = string.Format("/v3/members);

            // This is how to add parameters
            request.AddParameter("email", email);
            request.AddParameter("password", password);
            request.AddParameter("terms-and-conditions", "true");

            // This looks correct assuming you are putting your actual x-api-key here
            request.AddHeader("x-api-key", "yxyxyxyx");

            // There is a chance you need to configure the aws api gateway to accept this content type header on that resource. Depends on how locked down you have it
            request.AddHeader("content-type", "application/x-www-form-urlencoded");
            IRestResponse response = Client.Execute(request);
            Console.WriteLine(request);
            if (!IsReturnedStatusCodeOK(response))
            {
                throw new HttpRequestException("Request issue -> HTTP code:" + response.StatusCode);
            }
            return response;

        }
0 голосов
/ 10 марта 2019

если данные отправляются в параметрах запроса, то у вас есть ошибка здесь:

request.Resource = string.Format("/v3/members/email={0}&password={1}&terms_and_conditions=true", email, password);

должно быть

request.Resource = string.Format("/v3/members?email={0}&password={1}&terms_and_conditions=true", email, password);

в то время какЯ читаю данные на python request.post docs - это тело, а не запрос.Поэтому вам нужно создать

request.AddBody(new { A = "foo", B = "bar" })

, также этот psot может быть полезен

urlencoded

...