首页 文章

SharePoint网站中的MVC Web API

提问于
浏览
1

我们将大部分网站迁移到 Cloud 中的SharePoint服务器 . 我们当前的设置使用MVC Web API从数据库中检索数据 . 我们不希望在单独的域下托管API,因此也需要在SharePoint域下移动API . 这个要求没有放松 .

有没有办法将我的API发布到SharePoint?或者Visual Studio中是否有特定于SharePoint的API项目模板?如果没有,我的选择是什么?

EDIT 最初我已经要求MVC API需要成为SharePoint 2013的一部分 . 但现在,只要可以从根域访问,API就可以驻留在SharePoint的任何位置(内部或外部) - 到目前为止它似乎不允许(错误消息: Calls to WebProxy without an app context are not allowed. “) . 仍然试图看看这是否可能,如果可以,怎么样?

3 回答

  • 0

    听起来您想要创建的代理已经是SharePoint JSOM的一部分 . 看看这些:

    http://msdn.microsoft.com/en-us/library/office/fp179895(v=office.15).aspx

    http://msdn.microsoft.com/en-us/library/office/jj245162(v=office.15).aspx

    这将允许您克服跨源问题 . SP.WebProxySP.WebRequestInfo 允许您使用javascript在javascript执行的域之外进行调用 .

    幕后真正发生的是SharePoint的JavaScript API将请求发送到您的sharepoint.com租赁服务器,然后该服务器将从SharePoint服务器调用该服务,并将响应返回给您的javascript . 您可以在sharepoint托管的应用中实现它:

    // this javascript executes from my-company.sharepoint.com
    var responseDocument = undefined;
    $('#cross').click(function () {
        var ctx = SP.ClientContext.get_current();
        var request = new SP.WebRequestInfo();
        request.set_url('https://www.somewebapi.com/my/custom/route');
        request.set_method("GET");
        responseDocument = SP.WebProxy.invoke(ctx, request); // executes on sp server
        ctx.executeQueryAsync(onSuccess, onError);
    });
    function onSuccess() {
        var response = responseDocument.get_body();
        alert('success ' + response);
    }
    function onError(err) {
        alert(JSON.stringify(err));
    }
    

    ...并且由于从服务器调用在其他域上托管的远程api,因此您不必担心任何跨域问题 .

    Update

    要回答您的更新,请check the results from this link .

    您是否已将远程 endpoints 添加到AppManifest.xml?

  • 1

    SharePoint不会为您提供定义自己路由的机会 . 这就是为什么你不能使用老式的SharePoint解决方案来发布asp.net web api . 您可以考虑使用apps for SharePoint . 它就像是与SharePoint有一些连接的独立应用程序 .

  • 0

    最终切换到JSONP解决方案 . 在Visual Studio中的MVC Web API项目中安装了WebApiContrib.Formatting.JsonP,并调整了调用API的SharePoint JavaScript,以包含 ?callback=? (回调等于问号) . 一切都保持不变 . 没有SharePoint的代理调用者需要!不需要SharePoint应用程序!

相关问题