代码之家  ›  专栏  ›  技术社区  ›  AutoTester213

如何使用rest sharp传递x-api-key

  •  0
  • AutoTester213  · 技术社区  · 6 年前

    我试图在rest sharp中以头的形式发送api密钥,这就是我要尝试的,

    我得到了 {"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)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Jalil Alchy    6 年前

    看起来你的c中有一个错误,它已经指向你了,但它必须是 members?email members/email 如果您正在处理aws api网关,后者将注册为一个完全不同的端点,这可能会导致各种奇怪的状态代码向您抛出,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;
    
            }
    
        2
  •  0
  •   Sebastian 506563    6 年前

    如果在查询参数中发送数据,则出现以下错误:

    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请求时,post docs的数据是body而不是query。所以你需要创造

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

    这个psot也可以帮助

    urlencoded