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 發生。
這是個隱藏字段,它包含這個頁面的 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.
10. 為按鈕添加click事件:
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);
最后,執行這個請求獲得響應:
就像我們在上個示例看到的一樣,如果現在去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 開發示例 系列
轉載于:https://www.cnblogs.com/fengwenit/p/3558359.html
總結
以上是生活随笔為你收集整理的SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UIDynamicBehavior的行为
- 下一篇: MVC3 - 控制器