Comment obtenir la valeur de résumé de demande de l'application hébergée par le fournisseur?

Je suis en développement SharePoint 2013 Fournisseur d'application hébergée à l'aide de javascript Api REST. Afin d'effectuer de la créer (la POSTE), ou de mise à jour (FUSION) des opérations sur les éléments sharepoint server j'ai besoin de régler le "X-RequestDigest' en-tête de la demande.

Lorsque dans SharePoint hébergé des applications que j'ai pu utiliser le http://contoso.sharepoint.com/SharePointHostedApp/_api/contextinfo service pour récupérer la demande de digérer valeur; cependant, je vais avoir de la difficulté à obtenir cette valeur lorsque dans un fournisseur d'application hébergée.

La première différence de fournisseur d'application hébergée, c'est que maintenant nous avons besoin de faire une demande de domaines car nous ne sommes pas en cours d'exécution dans un site sharepoint, mais dans un autre domaine hébergé sur un serveur différent. Pour être clair: au lieu de

$.ajax({
    url: appWebUrl + '/_api/contextinfo',
    method: "POST",
    headers: { "Accept": "application/json; odata=verbose" }
})

Je suppose que nous devons utiliser la SP.RequestExecutor pour exécuter une application demande de domaine.
Quand je construis la demande, il ressemble à la suivante (j'ai changé l'url de quelque chose de faux, mais, fondamentalement, nous sommes raconter le proxy à utiliser le web hôte a la cible et d'obtenir la /_api/contextinfo point de terminaison):

https://contoso-6f921c6addc19f.sharepoint.com/ProviderHostedApp/_api/SP.AppContextSite(@target)/contextinfo?@target=%27https://contoso.sharepoint.com%27

Cependant, je reçois cette erreur: Cannot find resource for the request contextinfo. sens que le point de terminaison n'existe pas.

J'ai fait en sorte d'utiliser la méthode POST avec le bon application/json;odata=verbose en-têtes dont le corps est vide.

Comment puis-je obtenir la demande de digérer la valeur de la /_api/contextinfo service pour le fournisseur d'application hébergée?

Basé sur ce que j'ai fait des recherches:

  • Nous ne pouvons pas utiliser $('#__REQUESTDIGEST').val(); parce que ce n'est pas à la disposition d'un fournisseur d'application hébergée.
  • Nous avons besoin d'utiliser certains de de la croix-demande de domaine depuis que je suis en cours d'exécution en dehors de sharepoint.
  • J'ai essayé le réglage de la cible de la croix-demande de domaine à la fois à l'hostWebUrl et la appWebUrl et les deux donnent la même erreur.

Il doit y avoir un moyen d'obtenir cette valeur, sinon, nous aurions seulement se limiter à des opérations de lecture lors de l'utilisation de JavaScript. Quelqu'un d'autre a résolu ce problème à l'aide de javascript?

Techniquement je pourrais essayer de mettre en œuvre les services de l'aide de l'otite chronique sur le serveur et de les exposer à l'aide de WebAPI ou WCF, mais il semble déraisonnable d'avoir à la mettre en œuvre.

Mise à JOUR:

Je suis allé de l'avant et essayé d'ajouter un WebAPI contrôleur qui expose un service qui récupère la demande digérer valeur. Ce fait ne extraire une demande digérer valeur; toutefois, lorsque vous tentez de l'utiliser dans l'en-tête de futurs appels que je reçois l'erreur: "The security validation for this page is invalid and might be corrupted. Please use your web browser's Back button to try your operation again." je devine que la demande de digérer valeur a quelques referer informations d'en-tête qui indique qu'il a été demandé par le serveur; cependant, à l'avenir, les demandes faites avec elle sont dans le navigateur, et cette disparité pourrait être une raison valable pour qu'il soit valide.

Quelques remarques sur la tentative d'ajout de la webAPI contrôleur.
J'ai basé mon code de cet exemple: http://code.msdn.microsoft.com/SharePoint-2013-Perform-335d925b mais converti à utiliser la plus récente HttpClient.
J'ai surchargé la méthode Page_Load, stockée le contextTokenString dans une variable qui peut être consulté par le WebAPI contrôleur ensuite analysé/utilisé lors de la demande de contextinfo.

Personne ne sait si c'est un diagnostic correct de cette erreur? Est-il quelque chose de codé dans la demande de digérer la valeur qui l'empêcherait de pouvoir être récupérée comme je l'ai suggéré?

J'ai également ouvert une question connexe sur les forums MSDN depuis que je suis désespéré de trouver une réponse:
http://social.msdn.microsoft.com/Forums/sharepoint/en-US/f601fddd-3747-4152-b2d1-4e89f0a771c4/question-about-limitation-of-providerhosted-apps-is-it-possible-to-make-rest-calls-with-javascript?forum=sharepointdevelopmentprevious

Je trouve qu'il est très difficile de croire que ce pourrait être une limitation de fournisseur d'applications hébergées, mais compte tenu de tous les tests que j'ai fait, je commence à douter de la viabilité du fournisseur d'applications hébergées lorsque vous voulez écrire en javascript.

Mendier de l'Aide!

source d'informationauteur Matt Mazzola