三沣开发知识 购物 网址 游戏 小说 股票 美女 租车 短信 新闻 笑话 | 开发 汉字 下载 软件 图书馆
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> SharePoint -> SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API) -> 正文阅读
 

[SharePoint]SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)

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 开发示例 系列
  SharePoint 最新文章
Timeline Storyteller 现已加入自定义图表库
SharePoint 2016 配置工作流环境
SharePoint 2016 站点注册工作流服务报错
Work Management Service application in S
SharePoint 2016 安装 Cumulative Update f
SharePoint 2016 工作流报错“没有适用于此
SharePoint JavaScript API in application
SharePoint 2010 "客户端不支持使用wi
SharePoint 2013 JavaScript 对象判断用户权
正确的修改自定义母版页方式
上一篇文章      下一篇文章      查看所有文章
加:2015-03-30 07:09:19  更:2017-05-16 16:23:13 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 Android开发 站长 古典小说 网文精选 搜图网 美图 中国文化英文版 多播 租车 短信
2017-8-19 3:54:55
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库