【问题标题】:How to pass x-APi-key using rest Sharp如何使用 rest Sharp 传递 x-APi-key
【发布时间】:2019-03-10 09:44:25
【问题描述】:

我正在尝试在 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)

【问题讨论】:

    标签: c# python rest restsharp


    【解决方案1】:

    看起来您的 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】:

      如果数据是在查询参数中发送的,那么这里有一个错误:

      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 数据时,BODY 不是查询。所以你需要创建

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

      这个psot也很有帮助

      urlencoded

      【讨论】:

      • 好的,我看到了,我检查了 Postman,但我无法通过 postman 发出请求,我被禁止访问,但 python 可以工作
      • members?email vs members/email 秒是坏的。
      • 我知道我已经改变了,但我仍然无法得到响应
      • 您的代码至少有 5 个原因可能出现错误。您需要调试代码,或创建适当的邮递员请求以查看“适当”的含义。
      猜你喜欢
      • 2021-11-22
      • 1970-01-01
      • 2018-05-30
      • 2019-01-16
      • 1970-01-01
      • 2016-10-07
      • 2014-02-09
      • 2014-04-27
      • 2015-01-03
      相关资源
      最近更新 更多