【发布时间】:2016-12-07 01:19:56
【问题描述】:
朋友们,
我正在尝试从 Word 插件调用 API 并收到“拒绝访问”错误。我做了一些研究,看起来“跨源资源共享”是原因。
1.网络 API
我在“http://localhost:61546/api/ORG_NAMES”本地托管 Web API 2 & 我已启用 CORS 以接受所有来源,请参阅下面的 WebApiConfig。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
2。测试应用
为了测试这个 API 以确保它支持 CORS,我创建了下面的页面并托管在 localhost:52799/home.html 上,我能够得到预期的响应。我已经在 IE 10 和 Chrome 中对此进行了测试。
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function () {
var obj;
.support.cors = true;
$.getJSON("http://localhost:61546/api/ORG_NAMES/112233",
function (data) {
alert(data.ORG_ID);
});
});
});
</script>
</head>
<body>
<button>Click me</button>
</body>
3. Word 插件
现在我想从我的 Word Web 插件调用这个 API。从不同主机 https://localhost:44339/ 运行的 Word 加载项,请参见下面的代码。此处 getJSON 返回“拒绝访问”。
var OrgID;
$.getJSON("http://localhost:61546/api/ORG_NAMES/112233",
function (data) {
OrgID = data.ORG_ID;
});
此外,当我从 word 插件调用 API 时,它不会被提琴手。
注意:这是“Web 插件 --> Word 插件”项目。
4.修复 - 需要帮助
不知道为什么我从 Word-Add-In 收到“拒绝访问”错误,如果 CORS 是问题,那么我的测试应用程序 (#2) 不应该工作,对吗?
我曾尝试使用“$.ajax”、“XMLHttpRequest”调用 JSON,但没有成功。我可能缺少一些配置设置。
在这里感谢任何帮助。 如果您需要更多信息,请告诉我。
【问题讨论】:
-
我遇到了同样的问题,我将应用程序域更改为适当的值,并且您必须确保您使用的是 https,因为如果您使用的是 http,您会收到 CORs 错误。确保在启动 word 加载项时您是 https
-
你好匿名朋友 - 你是说如果你尝试通过 Office-JS 的 CORS 请求,并且你的 api 端点不是 SSL,Office JS JavaScript 会直接拒绝它吗? - 这实际上是我所经历的,但我找不到任何文件说是这种情况。
-
是的。但是每个示例和页面都使用https,例如,请参阅Addressing same-origin policy limitations in Office Add-ins
标签: asp.net-web-api ms-word asp.net-web-api2 office365api office-js