How to Get SharePoint Client Context in SharePoint Apps (Provider Hosted / SharePoint Access ) in CSOM (Client Side Object Model)
2014-02-11 16:45
1156 查看
http://www.codeproject.com/Articles/581060/HowplustoplusGetplusSharePointplusClientplusContex
Download source code
First, you need to know how SharePoint offers the
Example: https://rajee.sharepoint.com/_layouts/15/appredirect.aspx?instance_id={B0D5D768-303F-4AE7-A4D3-F94B687C6AB3
At that point, we need to capture the
Normally
In my approach, I used another key which is called as
Reference: Tips and FAQs: OAuth and remote apps for SharePoint 2013
The following shows my approach to do this. If you have a master page, you need to put the code in the
Collapse | Copy Code
This is code for button click.
Collapse | Copy Code
Note: In the middle of the app, if the context is broken due to expiration or some other case you need to initialize the app from the AppRedirect, therefore you can:
Collapse | Copy Code
Download source code
Introduction
The first step of app development is to correctly get access to SharePoint client context. I have struggled to develop a simple model to initialize the SharePoint Client context. Most of the App development includes ASP Master pages. So I need to figure out a working model for app development.First, you need to know how SharePoint offers the
contextString.
contextStringoffers when SharePoint gets redirected from appredirect.aspx URL.
Example: https://rajee.sharepoint.com/_layouts/15/appredirect.aspx?instance_id={B0D5D768-303F-4AE7-A4D3-F94B687C6AB3
At that point, we need to capture the
contextStringand generate either AccessTokenor RefreshToken and save it for accessing the SharePoint Client Context at a later time. Otherwise, it will result in generating the error The parameter 'token' cannot be a null or empty string (This is a nasty error which drove me crazy.).
Normally
AccessTokenis valid for 12 hours and
RefreshTokenis valid for 6 months.
In my approach, I used another key which is called as
CacheKeyto identify the user uniquely. Therefore I use this value to maintain a cookie based on the user.
Reference: Tips and FAQs: OAuth and remote apps for SharePoint 2013
The following shows my approach to do this. If you have a master page, you need to put the code in the
onInit()rather than page load.
Collapse | Copy Code
protected void Page_Load(object sender, EventArgs e) { var key = Session["CashKey"]; // sharepoint url (app hosted url) var hostWeb = Page.Request["SPHostUrl"]; // Sharepoint url with app Title (app deployed sp url) Uri SharePointUri = new Uri(hostWeb + "/SharePointApp1/"); // This is first time the app is running if (key == null) { // get the TokenString var contextTokenString = TokenHelper.GetContextTokenFromRequest(Page.Request); // Get the contexttoken by passing the token string var contextToken = TokenHelper.ReadAndValidateContextToken (contextTokenString, Request.Url.Authority); //Since some browsers does not support cookie name more than 40 chars // Im taking first 40 chars var cookieName = contextToken.CacheKey.Substring(0, 40); //Add User specific cookie name to the Session Session.Add("CashKey", cookieName); // Get the Refresh Token var refreshToken = contextToken.RefreshToken; // Add the cookie value (refresh Token) Response.Cookies.Add(new HttpCookie(cookieName, refreshToken)); } else { // USER already in the application, means it is not getting redirect from the appRedirect // So contextstring is null } }
This is code for button click.
Collapse | Copy Code
protected void Button1_Click(object sender, EventArgs e) { // sharepoint url (app hosted url) var hostWeb = Page.Request["SPHostUrl"]; // Sharepoint url with app name (app deployed sp url) Uri SharePointUri = new Uri(hostWeb + "/SharePointApp1/"); // Get the cookie name from the session var key = Session["CashKey"] as string; // Get the refresh token from the cookie var refreshToken = Request.Cookies[key].Value; //Get the access Token By passing refreshToken // 00000003-0000-0ff1-ce00-000000000000 is principal name for SP2013 it is unique var accessToken = TokenHelper.GetAccessToken(refreshToken, "00000003-0000-0ff1-ce00-000000000000", SharePointUri.Authority, TokenHelper.GetRealmFromTargetUrl(SharePointUri)); // Access the Sharepoint Do your work using (var clientContext = TokenHelper.GetClientContextWithAccessToken ("https://rajee.sharepoint.com/SharepointApp1", accessToken.AccessToken)) { clientContext.Load(clientContext.Web, web => web.Title); clientContext.ExecuteQuery(); Response.Write(clientContext.Web.Title); } }
Note: In the middle of the app, if the context is broken due to expiration or some other case you need to initialize the app from the AppRedirect, therefore you can:
Collapse | Copy Code
var hostWeb = Page.Request["SPHostUrl"]; var val = TokenHelper.GetAppContextTokenRequestUrl(hostWeb, Server.UrlEncode(Request.Url.ToString()));
相关文章推荐
- How to Display a SharePoint Dialog from Ribbon Button and Get Selected Item Context
- How to get current date time in SharePoint Site Time Zone
- SharePoint 2013 Apps TokenHelper SharePointContext OAuth Provider-Hosted App (抄袭,测试 csc.rsp 用)
- 如何访问Azure上的SharePoint 网站(How to access the SharePoint site of Azure)
- How to use sharepoint webservices in web application
- How to enable “Edit Page” in SharePoint’s standard form.aspx
- how to change folder's sort number in sharepoint?
- Get the metadata value using client object model from the sharepoint 2010
- How to Create Multilingual Webpart in SharePoint 2010? Use Localization in Globalization.
- How to Create Mysite in SharePoint 2010
- Using Client Object Model In SharePoint
- 转:How to force a wordbreaker to be used in Sharepoint Search
- How to create custom navigation menu in SharePoint with XML data source 使用XML数据源在SharePoint创建自定义导航菜单
- How to get the current user logged into Sharepoint
- how to get ApplicationContext in SSH
- How to open PDF files in sharepoint
- How to create custom navigation menu in SharePoint with XML data source 使用XML数据源在SharePoint创建自定义导航菜单
- [Solution]How to create Project Web App in SharePoint
- How to get MetaData on client side in WCF?如何在客户端获取WCF service的元数据
- How to redirect to a Custom Page for Event Receiver in SharePoint 2010