0
我試圖訪問谷歌API V3 Calendarlist但我不斷收到四百零四分之四百零一反應,即使我有一個有效的accessToken的用戶。
(我完成了OAuth2 protocol for Web Server Applications並獲得了https://www.googleapis.com/auth/calendar許可)谷歌日曆API第3版:使用的accessToken檢索CalendarList
它已經很難找到良好的文檔對於這一點,谷歌的網站本身是不是非常有幫助,並搜索都充滿了舊v2的信息,或使用的SDK。通常我可以做翻譯蟒蛇答覆C#,但在這種情況下,即使沒有幫助我。
所以我拉我的頭髮,但我可能忘記了一些非常簡單的東西,像一個缺少的參數或somesuch,所以它將不勝感激,如果有人會快速瀏覽此代碼並告訴我什麼做錯了。
var applicationKey = moduleModel.Application.Key;
var userID = moduleModel.User.UserID;
var accessToken = moduleModel.User.AccessToken.Token;
// It doesn't seem to make any difference whether I use the querystring
// parameter or the request header to specify the access_token
var sendAccessTokenAsHeader =
!(Request.QueryString["SendAccessTokenAsHeader"] == "0");
// I tried navigating to a specific user but it results in a 404 Not Found
var requestSpecificUserID =
Request.QueryString["RequestSpecificUserID"] == "1";
// Including or omitting my API_KEY doesn't seem to make any difference
var sendApplicationKey =
!(Request.QueryString["SendApplicationKey"] == "0");
var urlBuilder = new System.Text.StringBuilder();
urlBuilder.Append("https://");
urlBuilder.Append("www.googleapis.com");
if (requestSpecificUserID)
{
urlBuilder.Append
(string.Format("/calendar/v3/users/{0}/calendarList", userID));
}
else
{
urlBuilder.Append
("/calendar/v3/users/me/calendarList");
}
var parameterJoiner = "?";
if (sendApplicationKey)
{
urlBuilder.Append
(
string.Format
(
"{0}{1}={2}",
parameterJoiner,
"key",
HttpUtility.UrlEncode(applicationKey)
)
);
parameterJoiner = "&";
}
if (!sendAccessTokenAsHeader)
{
urlBuilder.Append
(
string.Format
(
"{0}{1}={2}",
parameterJoiner,
"access_token",
HttpUtility.UrlEncode(accessToken)
)
);
parameterJoiner = "&";
}
var httpWebRequest = HttpWebRequest.Create(urlBuilder.ToString())
as HttpWebRequest;
httpWebRequest.CookieContainer = new CookieContainer();
if (sendAccessTokenAsHeader)
{
httpWebRequest.Headers["Authorization"] = string.Format
(
"Bearer {0}",
accessToken
);
}
// GetSafeResponse is just an extension method to catch the WebException
// when the HttpStatusCode != OK
var response = httpWebRequest.GetSafeResponse();
// returns 401 (requestSpecificUserID = false)
// or 404 (requestSpecificUserID = true)
var responseText = response.GetResponseText();
return responseText;
預先感謝您!