从Word Web加载项(Office.Js)进行的API调用不起作用:CORS问题?

Tan*_*may 5 ms-word asp.net-web-api asp.net-web-api2 office365api office-js

朋友们

我正在尝试从Word加载项调用API,并收到“访问被拒绝”错误。我做了一些研究,看来是“跨源资源共享”的原因。

1. Web 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 }
            );
        }
    }
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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;
             });
Run Code Online (Sandbox Code Playgroud)

另外,当我从单词加载项调用API时,它不会变成提琴手。

注意:这是“ Web加载项-> Word加载项”项目。

4.修复-需要帮助

不知道为什么我会从Word加载项中收到“访问被拒绝”错误,如果CORS是问题,那么我的测试应用程序(#2)应该不起作用,对吗?

我尝试使用“ $ .ajax”,“ XMLHttpRequest”调用JSON,但是它没有用。我可能缺少某些配置设置。

在这里感谢任何帮助。如果您需要更多信息,请与我们联系。

Mic*_*oft 2

由于这听起来像是仅 Office 加载项中的问题,而不是常规页面中的问题,因此您是否尝试过AppDomains在清单文件中进行设置?请参阅https://dev.office.com/docs/add-ins/overview/add-in-manifests中的“指定要在加载项窗口中打开的域”

<?xml version="1.0" encoding="UTF-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp">
<Id>c6890c26-5bbb-40ed-a321-37f07909a2f0</Id>
<Version>1.0</Version>
<ProviderName>Contoso, Ltd</ProviderName>
<DefaultLocale>en-US</DefaultLocale>
<DisplayName DefaultValue="Northwind Traders Excel" />
<Description DefaultValue="Search Northwind Traders data from Excel"/>
<AppDomains>
    <AppDomain>https://www.northwindtraders.com</AppDomain>
</AppDomains>
<DefaultSettings>
    <SourceLocation DefaultValue="https://www.contoso.com/search_app/Default.aspx" />
</DefaultSettings>
<Permissions>ReadWriteDocument</Permissions>
</OfficeApp>
Run Code Online (Sandbox Code Playgroud)

  • 我已经设置了正确的域名,但仍然不起作用。现在我正在尝试使用“JSONP”,但看起来它也有一些问题。 (3认同)