2

フレンド、API呼び出しWord Webアドイン(Office.Js)が機能していない:CORSの問題?

WordアドインからAPIを呼び出して「アクセスが拒否されました」というエラーが表示されています。私はいくつかの調査を行い、 "Cross Origin Resource Sharing"が原因だと思われます。

1.ウェブAPI

私はWebApiConfig下記参照、すべての起源を受け入れるようにCORSを有効にしている "http://localhost:61546/api/ORG_NAMES" &でローカルのWeb API 2をホストしています。

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.それはCORSをサポートして確保するために、このAPIをテストするためのテストアプリケーション

、私はページの下に作成し、ローカルホスト上でホストされています: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のアドイン

今、私は私の言葉のWebアドインをからこのAPIを呼び出すために望んでいました。別のホストから実行しているWordアドインhttps://localhost:44339/、以下のコードを参照してください。ここでgetJSONは「アクセスが拒否されました」を返します。

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

また、私が単語アドインからAPIを呼び出すと、それはフィドラーには行きません。

注:これは "Webアドイン - > Wordアドイン"プロジェクトです。

4.修正 - なぜ私は、ワードアドインからのエラー「アクセスが拒否されました」CORSが問題であるならば、私のテストアプリケーション(#2)はいけない取得しています

わからない助けが必要正しく働いた?

「$ .ajax」、「XMLHttpRequest」を使用してJSONを呼び出そうとしましたが、動作しませんでした。一部の設定が欠落している可能性があります。

ここにお手伝いをしてください。 詳細情報が必要な場合はお知らせください。

+1

私は同じ問題を抱えており、アプリケーションドメインを適切な値に変更しました。 HTTPを使用している場合、CORsエラーが発生するため、httpsを使用します。 https –

+0

という名前のアドインを起動したときに匿名の友人がいることを確認してください.Office-JSを介してCORSリクエストを試み、APIエンドポイントがSSLでない場合、Office JS JavaScriptは拒否しますそれは大丈夫ですか? - それは実際に私が経験していることですが、私はそれがそうであると言っているドキュメントを見つけることができません。 –

答えて

2

通常のページではなく、Officeアドイン内の問題のように聞こえるので、マニフェストファイルにAppDomainsを設定しようとしましたか?あなたはAjaxの呼び出しを行っている場合は、JSONPを必要としません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

私は正しいドメイン名を設定しましたが、依然として動作しません。今私は "JSONP"で試していますが、それにもいくつかの問題があるように見えます。 – Tanmay

+0

Going JSONP routeは制限される可能性があります。あるドメインでサイトを取得して別のドメインのサーバーと通信することができない場合は、リクエストをプロキシするWebAPI *を常に同じドメイン*内に置くことができます。 https://blogs.msdn.microsoft.com/officeapps/2013/06/10/create-a-web-service-for-an-app-for-office-using-the-asp-net-web-apiを参照してください。 /詳細はこちら –

1

を「アドインウィンドウで開きたいドメインを指定する」を参照してください。あなたはすべてHTTPSで起動していることを確認しなければなりません。HTTPで起動している場合は、そのトラフィックをブロックします。office-jsの背骨はIEであり、そこにあることを忘れないでください。セキュリティ目的のためのAPIは、HTTPSのみ

更新

は、オフィス-jsから、実際に二つのプロジェクトでで追加し、あなたのプロジェクトは、両方のHTTPSで起動していることを確認しなければならないことに注意してくださいできるようになります。また、マニフェストファイルを見て、あなたのソースを見て、それがHTTPSを指していることを確認してください

関連する問題