【发布时间】:2016-08-18 19:53:04
【问题描述】:
我目前正在构建一个 ASP.NET Web 应用程序,以简化 Google 站点、页面、Google 站点上的小工具和 Google 站点的 ACL 的配置。
我遇到了许多开发人员已经遇到的问题:跨域资源。根据关于对 Google API 的 CORS 请求的 Google 文档,您只需使用 XMLHttpRequest(或 AJAX)请求,在标头中提供您的访问令牌。更多信息可以在这里找到:
https://developers.google.com/api-client-library/javascript/features/cors
当我在 Google Sites 上的域内访问 Google Sites API 时,我已经完全能够完成此操作,当我的浏览器窗口的位置在域内时注入 AJAX 请求。从我的域中创建新站点的成功请求示例:
$.ajax(
{
////// REQUEST \\\\\\
type: "POST",
url: "https://sites.google.com/feeds/site/[domainName]",
contentType: "application/atom+xml",
headers: {
"Authorization": "Bearer " + [accessToken],
"GData-Version": "1.4"
},
data: ["<entry xmlns='http://www.w3.org/2005/Atom' xmlns:sites='http://schemas.google.com/sites/2008'>",
"<title>What a site</title>",
"<summary>Best description ever.</summary>",
"<sites:theme>ski</sites:theme>",
"</entry>"].join(""),
////// LOGGING \\\\\\
beforeSend: function () {
console.log('-------Making-the-request-------');
},
success: function (result) {
console.log(result);
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(thrownError);
console.log(xhr.status);
}
});
(在以下几种情况下,我将 https:// 写为 [https],因为我的帐户仍被限制为帖子中的 2 个链接)。
此时一切进展顺利,我认为我已将所有内容都设置为将代码用于我的 ASP.NET 站点。唉,事情并不总是按计划进行。当我在我的应用程序中执行完全相同的 AJAX 调用时(现在仍然托管在 [https]localhost:44301 上),我收到以下错误:
XMLHttpRequest 无法加载 [https]sites.google.com/feeds/site/[censored] 对预检的回应 请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用 Origin '[https]localhost:44301' 使用权。响应的 HTTP 状态代码为 405。
常见的 CORS 错误。不过我很惊讶,因为向 Google API 发出请求的建议方式就是这样。我还发现了一篇关于在 Google Cloud API 中使用 CORS 的文章:
https://cloud.google.com/storage/docs/cross-origin
在文章中写道:
大多数客户端(例如浏览器)使用 XMLHttpRequest 对象来创建 跨域请求。 XMLHttpRequest 负责所有的工作 插入正确的标头并处理与 服务器。这意味着您无需添加任何新代码来利用 CORS 支持,它可以像谷歌云存储一样正常工作 为 CORS 配置的存储桶。
当然,这不是 Google Sites API,但我很难相信 Google 没有在其所有 API 中实现相同的功能。
有谁知道是否有可能在独立的 ASP.NET 应用程序中实现诸如此类的成功请求?如果有,怎么做?
非常感谢您花时间阅读我的艰辛。
更新:
我已就我的问题联系了 Google Apps 支持,并得到了以下回复:
除了您提供的信息,我还查看了您的帖子 在 CORS authenticated requests to Google Sites feed/API blocked。 注释在 https://developers.google.com/google-apps/sites/docs/1.0/developers_guide_java#SiteFeedPOST 仅强化了“我可以创建新的 Google 网站吗?”下的声明。 和“我如何复制网站?”在 https://developers.google.com/google-apps/sites/faq#Getting__Started, 其中指出“Google Apps 用户可以使用站点供稿来……”但是, 如果您已授权,我不明白为什么这与您的问题有关 针对您的域管理员帐户,因为注释仅 表示 gmail.com 用户将无法使用列出的 创建或复制网站的方法。
我没用过CORS,所以不能评论它的操作,但是一直 能够使用 HTTP GET 和 POST 成功列出和创建站点 通过原始 HTTP 客户端发出请求,因此 API 正常运行 关于跨域请求。我使用了示例 XML 文档 在 https://developers.google.com/google-apps/sites/docs/1.0/developers_guide_protocol#SitesFeedPOST 创建我的站点,为客户端配置我的凭据 开发者控制台项目。请求仅失败的事实 您的 ASP.NET 站点暗示该环境中有某些东西 配置不正确。不幸的是,那不在我的范围内 支持范围,所以我无法提供任何具体建议,其他 而不是检查相关文件,或在 Stack Overflow 的 ASP.NET 部分,位于 https://stackoverflow.com/questions/tagged/asp.net.
【问题讨论】:
-
你可以使用 JSONP 做到这一点
标签: asp.net ajax google-api xmlhttprequest cors