设为首页 收藏本站
查看: 819|回复: 0

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

[复制链接]

尚未签到

发表于 2015-9-27 14:38:28 | 显示全部楼层 |阅读模式
  上个示例(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=&quot;SPAppToken&quot; runat=&quot;server&quot; />
<div>   
<table>
<tr>
<td>REST Path:</td>
<td>
<asp:TextBox ID=&quot;txtREST&quot; runat=&quot;server&quot; Width=&quot;700&quot;>/_api/web/lists</asp:TextBox>
</td>
</tr>
<tr>
<td>Format:</td>
<td>
<asp:DropDownList ID=&quot;ddlFormat&quot; runat=&quot;server&quot;>
<asp:ListItem Value=&quot;application/json;odata=verbose&quot;>application/json;odata=verbose</asp:ListItem>
<asp:ListItem Value=&quot;application/atom-xml&quot;>application/atom-xml</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
</table>
<asp:Button ID=&quot;cmdRunRequest&quot; runat=&quot;server&quot; Text=&quot;Execute the REST Request&quot; OnClick=&quot;cmdRunRequest_Click&quot; />
</div>
<h2><asp:Label ID=&quot;lblStatus&quot; runat=&quot;server&quot; Text=&quot;&quot;></asp:Label></h2>
<asp:Label ID=&quot;lblOutput&quot; runat=&quot;server&quot; Text=&quot;&quot;></asp:Label>

  跟上个示例一样的UI,不同的是这里用的是ASP.NET 服务端控件,点击按钮后将引起ASP.NET postback 发生。


<asp:HiddenField ID=&quot;SPAppToken&quot; runat=&quot;server&quot; />
这是个隐藏字段,它包含这个页面的 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[&quot;SPAppWebUrl&quot;]);
// 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[&quot;SPAppWebUrl&quot;] + txtREST.Text);
req.Method = &quot;GET&quot;;
req.Accept = ddlFormat.SelectedValue;
req.Headers.Add(&quot;Authorization&quot;, &quot;Bearer &quot; + 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[&quot;SPAppWebUrl&quot;] + txtREST.Text);
req.Method = &quot;GET&quot;;
req.Accept = ddlFormat.SelectedValue;
req.Headers.Add(&quot;Authorization&quot;, &quot;Bearer &quot; + 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没有任何逻辑。
DSC0000.png
  
  SharePoint 2013 APP 开发示例 系列

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-119584-1-1.html 上篇帖子: 使用SharePoint Client OM来查询列表的注意事项 下篇帖子: sharepoint gridview webpart
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表