Como obter o valor de resumo da solicitação do aplicativo hospedado pelo provedor?

Estou desenvolvendo um aplicativo hospedado pelo SharePoint 2013 Provider usando javascript REST Api. Para executar operações de criação (POST) ou atualização (MERGE) em itens do sharepoint, preciso definir o cabeçalho 'X-RequestDigest' com a solicitação.

Quando em aplicativos hospedados no SharePoint, eu era capaz de usar ohttp://contoso.sharepoint.com/SharePointHostedApp/_api/contextinfo serviço para recuperar o valor de resumo da solicitação; no entanto, estou tendo problemas para obter esse valor em um aplicativo hospedado em um provedor.

A primeira diferença do aplicativo hospedado pelo provedor é que agora precisamos fazer uma solicitação entre domínios, pois não estamos executando em um site de compartilhamento, mas em um domínio diferente hospedado em um servidor diferente. Para ser claro: em vez de

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

Eu assumi que precisamos usar oSP.RequestExecutor para executar uma solicitação entre domínios. Quando eu construo a solicitação, ela se parece com a seguinte (alterei os URLs reais para algo falso, mas basicamente estamos dizendo ao proxy para usar a web host que tem o destino e obter o/_api/contextinfo ponto final):

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

No entanto, eu recebo este erro:Cannot find resource for the request contextinfo. significando que o terminal não existe.

Certifiquei-me de usar o método POST com a corretaapplication/json;odata=verbose cabeçalhos com um corpo vazio.

Como obtenho o valor de resumo da solicitação no/_api/contextinfo serviço ao aplicativo hospedado pelo provedor?

Com base no que pesquisei:

Não podemos usar$('#__REQUESTDIGEST').val(); porque isso não está disponível para um aplicativo hospedado pelo provedor.Precisamos usar alguns dos pedidos entre domínios, pois estou executando fora do sharepoint.Eu tentei definir o destino da solicitação entre domínios para o hostWebUrl e o appWebUrl e ambos dão o mesmo erro.

Deve haver alguma maneira de obter esse valor; caso contrário, estaríamos limitados a ler operações ao usar JavaScript.Alguém mais resolveu isso usando javascript?

Tecnicamente, eu poderia tentar implementar os serviços necessários usando o CSOM no servidor e expô-los usando WebAPI ou WCF, mas não parece razoável ter que implementá-lo.

ATUALIZAR:

Fui em frente e tentei adicionar um controlador WebAPI que expõe um serviço que recupera o valor de resumo da solicitação. Na verdade, isso recupera um valor de resumo da solicitação; no entanto, ao tentar usar isso no cabeçalho de chamadas futuras, recebo o erro:"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." Eu estou supondo que o valor de resumo da solicitação contenha algumas informações do cabeçalho do referenciador, o que indica que foi solicitado pelo servidor; no entanto, as solicitações futuras feitas com ele são do navegador e essa incompatibilidade pode ser um motivo aceitável para ser inválido.

Mais algumas notas sobre a tentativa de adicionar o controlador webAPI. Baseei meu código neste exemplo:http://code.msdn.microsoft.com/SharePoint-2013-Perform-335d925b mas o converteu para usar o HttpClient mais recente. Sobrecarreguei o método Page_Load, armazenei o contextTokenString em uma variável que poderia ser acessada pelo controlador WebAPI e depois o analisei / usei ao solicitar o contextinfo.

Alguém sabe se este é um diagnóstico correto desse erro? Existe algo codificado no valor de resumo da solicitação que impediria que ele pudesse ser recuperado como sugeri?

Também abri uma pergunta relacionada nos fóruns do MSDN, pois estou desesperada para encontrar uma resposta: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 = sharepointdevelopmentHistórico

Acho muito difícil acreditar que isso possa ser uma limitação dos aplicativos hospedados pelo provedor, mas, considerando todos os testes realizados, estou começando a duvidar da viabilidade dos aplicativos hospedados pelo provedor quando você deseja escrever em javascript.

Implorando por ajuda!

questionAnswers(4)

yourAnswerToTheQuestion