在RestSharp中执行不良要求,但从事邮递员工作

时间:2020-07-17 13:24:19

标签: c# api restsharp

基本上,我一直在尝试使用restsharp在c#上通过oauth2进行身份验证,但是我收到了错误的请求响应,我不确定这是否与API配置相关,或者我是否缺少该内容。我的代码。

public string getToken(string email, string password)
    {
        var restclient = new RestClient(loginUrl);
        RestRequest request = new RestRequest("request/oauth") { Method = Method.GET };
        request.AddHeader("Accept", "application/json");
        request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
        request.AddParameter("email", HttpUtility.UrlPathEncode(email));
        request.AddParameter("password", HttpUtility.UrlPathEncode(password));
        request.AddParameter("grant_type", HttpUtility.UrlPathEncode("password"));
        var tResponse = restclient.Execute(request);
        var responseJson = tResponse.Content;
        string token = JsonConvert.DeserializeObject<Dictionary<string, object>>(responseJson)["access_token"].ToString();
        return token;
    }

这是我执行该代码时的响应 restsharp execution enter image description here

这是邮递员处决

Postman execution

谢谢!

3 个答案:

答案 0 :(得分:2)

我认为以添加方式添加参数存在问题。 最新的restsharp支持此功能,

此外,通过设置为false

避免参数编码
var request = new RestRequest("resource", Method.GET);
request.AddQueryParameter("email", "test@test.com",false); 

答案 1 :(得分:0)

var restclient = new RestClient(loginUrl);我认为您需要检查您的网址。

答案 2 :(得分:0)

尝试一下。.您的OAuth是密码粒度,可以确保您没有丢失任何凭据,例如 client_id,scope和client_secret

public static string getAccessToken(string usern, string pswd)
        {
            RestClient client = new RestClient(ConfigurationManager.AppSettings["TokenUrl"]);
            RestRequest request = new RestRequest() { Method = Method.GET};

            request.AddParameter("grant_type", "password", ParameterType.GetOrPost);
            request.AddParameter("username", usern, ParameterType.GetOrPost);
            request.AddParameter("password", pswd, ParameterType.GetOrPost);
           

            IRestResponse response = client.Execute(request);
            var responseJson = response.Content;
            var token = JsonConvert.DeserializeObject<Dictionary<string, object>>(responseJson)["access_token"].ToString();


            return token;

        }