Google API v3 캘린더 목록에 액세스하려고하지만 사용자에 대해 유효한 AccessToken이 있어도 401/404 응답을 계속받습니다.
는 (내가 OAuth2 protocol for Web Server Applications을 완료하고 https://www.googleapis.com/auth/calendar 허가를받은)Google 캘린더 API v3 : 캘린더 목록을 검색하기 위해 AccessToken 사용
이 좋은 문서를 찾기 위해 오히려 어려운이었다, 구글 사이트 자체가 매우 도움이되지 않습니다 및 검색 오래된 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;
감사합니다.