如何使用 C# 访问 Yelp Fusion Api 的 OAuth2 令牌
Posted
技术标签:
【中文标题】如何使用 C# 访问 Yelp Fusion Api 的 OAuth2 令牌【英文标题】:How to get access to OAuth2 token for Yelp Fusion Api using C# 【发布时间】:2017-09-19 03:45:40 【问题描述】:我正在尝试使用 C# 获取 Yelp Fusion Api 的访问 OAuth2 令牌,如文档中所述:https://www.yelp.com/developers/documentation/v3/get_started
但是,我得到了错误:
找不到client_id 或client_secret。确保在应用程序 application/x-www-form-urlencoded 的正文中提供 client_id 和 client_secret
以下是sn-p的代码:
<code>
string baseURL = "https://api.yelp.com/oauth2/token";
Dictionary<string, string> query = new Dictionary<string, string>();
query["grant_type"] = "client_credentials";
query["client_id"] = CONSUMER_KEY;
query["client_secret"] = CONSUMER_SECRET;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseURL);
request.Accept = "application/json";
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream());
requestWriter.Write(query.ToString());
requestWriter.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
Console.WriteLine(stream.ReadToEnd());
</code>
【问题讨论】:
【参考方案1】:根据 Yelp Fusion 文档here,您需要进行 POST 调用,并且参数应以 application/x-www-form-urlencoded 格式发送。所以上面使用的方法是不正确的。
这应该会有所帮助:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(baseURL);
webRequest.Method = "POST";
webRequest.AllowAutoRedirect = true;
webRequest.Timeout = 20 * 1000;
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
//write the data to post request
String postData = "client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET + "&grant_type=client_credentials";
byte[] buffer = Encoding.Default.GetBytes(postData);
if (buffer != null)
webRequest.ContentLength = buffer.Length;
webRequest.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string strResponse = reader.ReadToEnd();
请注意,上面的示例将返回字符串格式的数据。要读取实际值,您必须序列化数据。
编辑:自 2018 年 3 月 1 日起,yelp fusion API 的身份验证过程发生了变化。这不再适用。
【讨论】:
请检查上次编辑,现在以粗体突出显示。现在你需要 api secret 和 api key 并且不需要生成 auth token。以上是关于如何使用 C# 访问 Yelp Fusion Api 的 OAuth2 令牌的主要内容,如果未能解决你的问题,请参考以下文章
容器,云和代码:Yelp如何使用Mesos和Docker构建混合云?
使用 API 访问 Palantir Foundry Fusion