SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)
上个示例(SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API))是基于JavaScript,运行在web browser内去访问REST API;在这个示例里,我们将用服务端代码创建同样的功能,我们将用到TokenHelper和HTTPWebRequest 对象。
• 项目模板里的TokenHelper.cs 文件被用作管理Token
• HttpWebRequest 对象被用来格式化和发送请求
• HttpWebResponse 对象用于解释来自REST API的响应
我们将同样的创建一个 auto-hosted app 和 ASP.NET 控件,然后我们将添加服务端的代码去请求REST并显示结果。
1. 打开Visual Studio 2012.
2. 创建一个新的SharePoint 2013 app.
3. 选择auto-hosted .
4. 打开Default.aspx (Pages 文件夹).
5. 替换<form>里的内容:
<asp:HiddenField ID="SPAppToken" runat="server" />
<div>
<table>
<tr>
<td>REST Path:</td>
<td>
<asp:TextBox ID="txtREST" runat="server" Width="700">/_api/web/lists</asp:TextBox>
</td>
</tr>
<tr>
<td>Format:</td>
<td>
<asp:DropDownList ID="ddlFormat" runat="server">
<asp:ListItem Value="application/json;odata=verbose">application/json;odata=verbose</asp:ListItem>
<asp:ListItem Value="application/atom-xml">application/atom-xml</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
</table>
<asp:Button ID="cmdRunRequest" runat="server" Text="Execute the REST Request" OnClick="cmdRunRequest_Click" />
</div>
<h2><asp:Label ID="lblStatus" runat="server" Text=""></asp:Label></h2>
<asp:Label ID="lblOutput" runat="server" Text=""></asp:Label>跟上个示例一样的UI,不同的是这里用的是ASP.NET 服务端控件,点击按钮后将引起ASP.NET postback 发生。
<asp:HiddenField ID="SPAppToken" runat="server" />
这是个隐藏字段,它包含这个页面的 context token ,我们加入这个字段是因为当postback发生时我们调用SharePoint时要用到它。另一种方法是,我们可以把context token放到 session 里,这就看你怎么平衡了,放到session里,可能会引起扩展性的问题;如果页面没有用到SSL,这时把它放到页面里可能会被拦截。本例的页面将要用到SSL,所以把token放到页面上是合适的。实际上这个token是以同样的方式post回来的。
6. 保存 Default.aspx.
7. 打开 Default.aspx.cs .
8. 加入下面的引用:
using System.Net;
using System.IO;
9. 加入下面代码到Page_Load 里,这段代码为form提供了context token.
if (!IsPostBack)
SPAppToken.Value = TokenHelper.GetContextTokenFromRequest(Request);
10. 为按钮添加click事件:
protected void cmdRunRequest_Click(object sender, EventArgs e)
{
// For testing only!
// Remove this line before releasing to production.
TokenHelper.TrustAllCertificates(); Uri appWebUrl = new Uri(Request.QueryString["SPAppWebUrl"]); // The context token is retreived from the SPAppToken field
// in TokenHelper.GetContextTokenFromRequest().
SharePointContextToken contextToken =
TokenHelper.ReadAndValidateContextToken(
TokenHelper.GetContextTokenFromRequest(Request),
Request.Url.Authority); string accessToken =
TokenHelper.GetAccessToken(contextToken, appWebUrl.Authority).AccessToken; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Request.QueryString["SPAppWebUrl"] + txtREST.Text);
req.Method = "GET";
req.Accept = ddlFormat.SelectedValue;
req.Headers.Add("Authorization", "Bearer " + accessToken); HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
lblStatus.Text = resp.StatusDescription; StreamReader st = new StreamReader(resp.GetResponseStream());
lblOutput.Text = WebUtility.HtmlEncode(st.ReadToEnd());
}
11. 保存Default.aspx.cs .
这段代码用一系列的步骤去请求REST,首先,获得 context token ,然后通过调用Windows Azure里的 Access Control Service生成access token:
SharePointContextToken contextToken =
TokenHelper.ReadAndValidateContextToken(
TokenHelper.GetContextTokenFromRequest(Request),
Request.Url.Authority); string accessToken =
TokenHelper.GetAccessToken(contextToken, appWebUrl.Authority).AccessToken;
接着,用URL和要求的header信息创建请求对象,注意把通过ACS生成的access token加到授权header里了。
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Request.QueryString["SPAppWebUrl"] + txtREST.Text);
req.Method = "GET";
req.Accept = ddlFormat.SelectedValue;
req.Headers.Add("Authorization", "Bearer " + accessToken);
最后,执行这个请求获得响应:
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
lblStatus.Text = resp.StatusDescription; StreamReader st = new StreamReader(resp.GetResponseStream());
lblOutput.Text = WebUtility.HtmlEncode(st.ReadToEnd());
就像我们在上个示例看到的一样,如果现在去run solution,会报错,因为没有app web,为了强制创建一个最小的app web, 我们还是加一个空的element 文件到项目里。
12. 右击app项目.
13. 选择 Add ➤ New Item….
14. 从Office/SharePoint里选择Empty Element,接着点击Add,至于文件名不重要,随便填。
15. 按F5 debug.
结果跟上个示例一样,不同的是在本例中,点击按钮引起browser去发送一个新的请求到服务器端web browser,然后返回整个页面,客户端的web browser没有任何逻辑。

SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)的更多相关文章
- SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)
虽然 JQuery 也能通过授权header实现跨域, 但SharePoint 提供了更简单的方法,它被实现在SP.RequestExecutor里 .它能访问跨域的服务包括REST AP ...
- SharePoint 2013 APP 开发示例 (三)使用远程的web资源
在这个示例里我们将详细介绍 TokenHelper 类, 我们将看到它是怎么简单地从远程web站点访问SharePoint的.我们还将取到它的一些值.这将帮助我们理解连接是怎么被构造的,同时也方便我们 ...
- SharePoint 2013 APP 开发示例 系列
SharePoint 2013 APP 安全: SharePoint 2013 APP 开发示例 (一)List 读写 SharePoint 2013 APP 开发示例 (二)获取用户信息 Share ...
- SharePoint 2013 APP 开发示例 (二)获取用户信息
SharePoint 2013 APP 开发示例 (二)获取用户信息 这个示例里,我们将演示如何获取用户信息: 1. 打开 Visual Studio 2012. 2. 创建一个新的 SharePo ...
- SharePoint 2013 APP 开发示例 (四)JQuery访问REST
这个示例里,我们将用JQuery AJAX去发送一个 REST请求,并查看返回结果.为了让我们更好地理解REST 接口,我们将添加一个输入框让用户可以指定REST的URL, 这将让我们尝试着用构造的U ...
- SharePoint 2013 APP 开发示例 (一)List 读写
在这个示例里,我们将创建一个页面测试 SharePoint APP的权限.这个页面有二个按钮,一个从documents里读数据,一个往documents里写数据: 1. 打开Visual Studio ...
- spring boot / cloud (六) 开启CORS跨域访问
spring boot / cloud (六) 开启CORS跨域访问 前言 什么是CORS? Cross-origin resource sharing(跨域资源共享),是一个W3C标准,它允许你向一 ...
- Nginx作为静态资源web服务之跨域访问
Nginx作为静态资源web服务之跨域访问 首先了解一下什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加的安全限制. 所谓同源是指,域名,协议,端口均相 ...
- SharePoint 2013 App 开发—App开发概述
基于安全性的考虑,SharePoint App 不能像其它两种方式一样,直接使用安全性更高的服务端代码的API.Javascript 扮演极为重要的角色,在SharePoint App中与ShareP ...
随机推荐
- [Oacle][Partition]Partition操作与 Index, Global Index 的关系
[Oacle][Partition]Partition操作与 Index, Global Index 的关系: ■ Regarding the local index and the global i ...
- 【php增删改查实例】第十五节 - 用户管理模块(删除确认)
假如有一天,用户找到你,说万一不小心手一抖,就点击了删除用户,不太好.能不能再误点的时候,再给个确认框,让用户进行二次确认. OK,用户是上帝.这边我们可以考虑用confirm方法进行开发. 参考代码 ...
- SERDES关键技术总结
转自https://www.cnblogs.com/liujinggang/p/10125727.html 一.SERDES介绍 随着大数据的兴起以及信息技术的快速发展,数据传输对总线带宽的要求越来越 ...
- 蓝牙baseband概述
从蓝牙specispecification中看,基带协议主要分为8个部分来介绍的,分别是概述.物理信道.物理连接.逻辑传输.逻辑连接.封包.比特流的处理.组网行为.这里面会涉及到很多的概念,主要是在概 ...
- 2018年高教社杯全国大学生数学建模竞赛A题解题思路
题目 先贴一下A的题目吧 A题 高温作业专用服装设计 在高温环境下工作时,人们需要穿着专用服装以避免灼伤.专用服装通常由三层织物材料构成,记为I.II.III层,其中I层与外界环境接触,III层与 ...
- CAD2020下载安装AutoCAD2020中文版下载地址+安装教程
AutoCAD2020中文版为目前最新软件版本,我第一时间拿到软件进行安装测试,确保软件正常安装且各项功能正常可以使用,立刻拿出来分享,想用最新版本的话,抓紧下载使用吧: 我把我用的安装包贡献给你下载 ...
- Iptables防火墙规则使用梳理
iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...
- kvm虚拟机日常操作命令梳理
KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理.废话不多说,下面列出kvm日常管理中的命令 1)查看KVM虚拟机配置文件及运行状态 KVM虚拟机默认配置文件位置: /etc/libvirt ...
- 读《移山之道-VSTS软件开发指南》
首先,我选择<移山之道>有几个原因.第一,书的名字给我一种新鲜感,而不是像另外两本书那么平常:第二,作者邹欣是老师推荐的,看一看他的书或许能让我发现老师对他推崇备至的原因,而实际上,读完这 ...
- 《linux内核设计与实现》第四章
调度程序负责决定哪个进程投入运行,何时运行以及运行多长时间.只有通过调度程序合理调度,系统资源才能最大限度发挥作用,多进程才会有并发执行的效果. 最大限度地利用处理器时间的原则是,只要有可以执行的进程 ...