Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (400)错误请求:获取Salesforce的AccessToken_C#_Asp.net_Oauth 2.0_Salesforce - Fatal编程技术网

C# (400)错误请求:获取Salesforce的AccessToken

C# (400)错误请求:获取Salesforce的AccessToken,c#,asp.net,oauth-2.0,salesforce,C#,Asp.net,Oauth 2.0,Salesforce,我正在尝试通过应用程序中的oauth从Salesforce获取所有联系人。我正在获取远程服务器返回一个错误:(400)请求错误。尝试通过我的回拨页面上的API令牌Url获取访问令牌时。即使当我复制URL并直接粘贴到URL时,它也会为我提供正确的数据。但无法获取访问令牌 我正在使用下面的方法获取访问令牌。请专家建议我在哪里犯了错误。同样的方法也适用于谷歌和LinkedIn public async Task<TokenResponse> GetAccessToken(string co

我正在尝试通过应用程序中的oauth从Salesforce获取所有联系人。我正在获取远程服务器返回一个错误:(400)请求错误。尝试通过我的回拨页面上的API令牌Url获取访问令牌时。即使当我复制URL并直接粘贴到URL时,它也会为我提供正确的数据。但无法获取访问令牌

我正在使用下面的方法获取访问令牌。请专家建议我在哪里犯了错误。同样的方法也适用于谷歌和LinkedIn

public async Task<TokenResponse> GetAccessToken(string code,string tokenUrl,string consumerKey,string consumerSecretKey,string redirecturl)
    {

        string responseFromServer = "";
        var webRequest = WebRequest.Create(tokenUrl);

        const string queryStringFormat = @"code={0}&client_id={1}&client_secret={2}&redirect_uri={3}&grant_type=authorization_code";
        string contents = string.Format(queryStringFormat
                                           , code
                                           , consumerKey
                                           , consumerSecretKey
                                           , redirecturl);

        webRequest.Method = "POST";
        byte[] postcontentsArray = Encoding.UTF8.GetBytes(contents);
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.ContentLength = postcontentsArray.Length;
        using (Stream requestStream = webRequest.GetRequestStream())
        {
            requestStream.Write(postcontentsArray, 0, postcontentsArray.Length);
            requestStream.Close();
            WebResponse response = webRequest.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            {
                if (responseStream != null)
                {
                    using (StreamReader reader = new StreamReader(responseStream))
                    {
                        responseFromServer = reader.ReadToEnd();
                        reader.Close();
                        responseStream.Close();
                        response.Close();
                    }
                }
            }

        }
        return JsonConvert.DeserializeObject<TokenResponse>(responseFromServer);
    }
public异步任务GetAccessToken(字符串代码、字符串tokenUrl、字符串consumerKey、字符串ConsumerCretKey、字符串重定向URL)
{
字符串responseFromServer=“”;
var webRequest=webRequest.Create(tokenUrl);
const string queryStringFormat=@“code={0}&client_id={1}&client_secret={2}&redirect_uri={3}&grant_type=authorization_code”;
字符串内容=string.Format(queryStringFormat
,代码
,消费主义
,ConsumerCretKey
,重定向URL);
webRequest.Method=“POST”;
byte[]postcontentsArray=Encoding.UTF8.GetBytes(contents);
webRequest.ContentType=“application/x-www-form-urlencoded”;
webRequest.ContentLength=postcontentsArray.Length;
使用(Stream requestStream=webRequest.GetRequestStream())
{
Write(postcontentsArray,0,postcontentsArray.Length);
requestStream.Close();
WebResponse=webRequest.GetResponse();
使用(Stream responseStream=response.GetResponseStream())
{
if(responseStream!=null)
{
使用(StreamReader=新StreamReader(responseStream))
{
responseFromServer=reader.ReadToEnd();
reader.Close();
responseStream.Close();
response.Close();
}
}
}
}
返回JsonConvert.DeserializeObject(responseFromServer);
}

请帮助我解决此问题。

我正在连接Salesforce,没有问题,但我使用的是HttpClient而不是WebRequest

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

            HttpContent content = new FormUrlEncodedContent(new Dictionary<string, string>
            {
                {"grant_type", "password"},
                {"client_id", _clientId},
                {"client_secret", _clientSecret},
                {"username", _userName},
                {"password", _password}
            }
                );

                using (var httpClient = new HttpClient())
                {
                    var message =
                        await httpClient.PostAsync(_authorizationUrl, content).ConfigureAwait(false);
                    var responseString = await message.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var obj = JObject.Parse(responseString);

                    var oauthToken = (string)obj["access_token"];
                    var serviceUrl = (string)obj["instance_url"];
}
ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
HttpContent=新的FormUrlEncodedContent(新字典
{
{“授权类型”,“密码”},
{“client_id”,“clientId},
{“客户机密”,“客户机密”},
{“用户名”,_username},
{“密码”,_密码}
}
);
使用(var httpClient=new httpClient())
{
var消息=
wait httpClient.PostAsync(_authorizationUrl,content).configurewait(false);
var responseString=await message.Content.ReadAsStringAsync().ConfigureAwait(false);
var obj=JObject.Parse(responseString);
var oauthToken=(字符串)obj[“访问令牌”];
var serviceUrl=(字符串)obj[“实例url”];
}

HTTP响应的主体是什么?这通常可以解释错误。你能澄清一下你的意思吗:“即使我复制了URL并直接粘贴到URL,它也给了我正确的数据”?在调试时,我获取URL以获得响应。我复制了那个URL并直接粘贴到浏览器上,它显示了正确的XML和访问令牌。但给出了代码中的错误。使用浏览器,您正在执行
GET
,但您的代码正在执行
POST
。你确定该服务需要表单url编码的帖子正文吗?是的,当我通过GET方法尝试时,它给出了错误,并表示需要post方法。我已根据我的要求对此进行了一些更改。Thankswowking在本地表现良好,但在部署到azure Function上后,收到400个错误,我面临与此错误相同的问题-{“错误”:“无效的授权”,“错误描述”:“身份验证失败”}问题已发布-