如何使用 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构建混合云?

使用 VMWare Fusion 访问 GPU

访问 boost fusion map 字段名称

使用 API 访问 Palantir Foundry Fusion

正如 Fusion Location Provider API 所声称的那样,位置更新在室内不起作用

如何用Lua来访问Unity 控件的属性