2

Freunde,API-Aufruf von Word-Web-Add-In (Office.Js) funktioniert nicht: CORS-Problem?

Ich versuche API aus Word-Add-in aufrufen und erhalten "Zugriff verweigert" Fehler. Ich habe etwas recherchiert und es sieht so aus, als ob "Cross Origin Resource Sharing" die Ursache ist.

1. Web API

Ich bin Hosting Web API 2 lokal an "http://localhost:61546/api/ORG_NAMES" & Ich habe CORS aktiviert alle Ursprünge zu akzeptieren, unter WebApiConfig See.

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. Test Application

diese API Um zu testen, es CORS unterstützt, um sicherzustellen, ich habe unten Seite und gehostet auf localhost erstellt: 52799/home.html, ich in der Lage war, erwartete Antwort zu erhalten . Ich habe dies in IE 10 & Chrome getestet.

<!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-Add-In

nun diese API von meinem Word Web-Add-In nennen ich wollte. Word Add-In läuft von verschiedenen Host https://localhost:44339/, siehe unten Code. Hier gibt getJSON "Zugriff verweigert" zurück.

 var OrgID; 
     $.getJSON("http://localhost:61546/api/ORG_NAMES/112233", 
      function (data) { 
       OrgID = data.ORG_ID; 
      }); 

Auch wenn ich API von Word-Add-in aufrufen, wird es nicht zu Fiddler gehen.

Hinweis: Dies ist das Projekt "Web-Add-Ins -> Word-Add-In".

4. Fix - Need Hilfe

nicht sicher, warum ich erhalte "Zugriff verweigert" Fehler aus Word-Add-In, wenn CORS die Frage ist dann meine Testanwendung (# 2) nicht habe gearbeitet, richtig?

Ich habe versucht, JSON mit "$ .ajax", "XMLHttpRequest" aufrufen, aber es hat nicht funktioniert.Ich möglicherweise einige Konfigurationseinstellungen fehlen.

Schätzen Sie jede Hilfe hier. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

+1

Ich hatte die gleichen Probleme, ich änderte die App-Domänen auf die entsprechenden Werte, und auch Sie müssen sicherstellen, dass Sie sind mit https, denn wenn Sie http verwenden, erhalten Sie den CORs-Fehler. Stellen Sie sicher, dass, wenn Sie Ihr Word-Add-in starten, dass Sie https sind –

+0

Hallo anonymer Freund - also sagen Sie, dass, wenn Sie eine CORS-Anfrage über Office-JS versuchen, und Ihre API Endpunkt ist nicht SSL, wird Office JS JavaScript zurückgewiesen es direkt? - Das ist in der Tat, was ich erlebe, aber ich kann keine Dokumentation finden, die besagt, dass das der Fall ist. –

Antwort

2

Da es wie ein Problem innerhalb eines Office-Add-Ins und nicht auf einer normalen Seite scheint, haben Sie versucht, AppDomains in der Manifest-Datei zu setzen? Siehe „Geben Sie Domänen, die Sie in dem Add-In-Fenster öffnen wollen“ in 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> 
+0

Ich habe die richtigen Domain-Namen eingestellt, funktioniert aber immer noch nicht. Jetzt versuche ich mit "JSONP" aber sieht aus wie es auch einige Probleme hat. – Tanmay

+0

Die JSONP-Route kann einschränkend sein ... Wenn Sie Ihre Site in einer Domäne nicht erreichen können, um mit einem Server auf einer anderen Domain zu kommunizieren, können Sie immer eine WebAPI * in derselben Domäne * haben, die die Anfrage weiterleitet. Siehe https://blogs.msdn.microsoft.com/officeapps/2013/06/10/create-a-web-service-for-an-app-for-office-using-the-asp-net-web-api/Für mehr Information. –

1

Sie nicht brauchen JSONP wenn Sie machen Ajax-Aufrufe. Sie müssen sicherstellen, dass Sie alle mit HTTPS starten. Wenn es in HTTP gestartet wird, blockiert es diesen Datenverkehr.Denken Sie daran, dass Office-Js Backbone ist IE und da für; Aus Sicherheitsgründen wird die api erlauben nur HTTPS

aktualisieren

Denken Sie daran, dass ein Büro-js in hinzuzufügen, ist tatsächlich zwei Projekte, und Sie müssen Ihre Projekte sind beide starten in HTTPS sicher. Auch ich würde nur über die Manifest-Datei und schauen Sie sich Ihre Quelle und stellen Sie sicher, dass Punkt HTTPS