2016-08-22 2 views
0

ich eine Abfrage haben, die wie folgt aussieht:Sharepoint CAML-Abfrage wird (401) Unauthorized Ausnahme

  var site = properties.Site; 
      var context = new ClientContext(site.Url); 

      List list = context.Web.Lists.GetByTitle(properties.ListTitle); 

      var query = new CamlQuery(); 
      query.ViewXml = "<View><Query><Where><Eq><FieldRef Name='FileLeafRef'/>" + 
             "<Value Type='Text'>" + fieldName + "</Value></Eq></Where></Query></View>"; 

      ListItemCollection itemCollection = list.GetItems(query); 
      context.Load(itemCollection); 
      context.ExecuteQuery(); 

In diesem Szenario properties ein SPItemEventProperties ist.

Wann immer es zu ExecuteQuery() bekommt, wirft es eine Ausnahme: The remote server returned an error: (401) Unauthorized.

Was die Ursache dafür sein könnte?

Antwort

1

Betrachten Sie Ihren Code Ich denke, das ist RER mit List Item Aktion verbunden. Wenn Sie es vom Host-Web (anstatt vom App-Web) ausführen oder wenn Sie CSOM verwenden, kann es passieren, dass die Authentifizierung in SharePoint fehlschlägt. Wenn Sie versuchen, Ihren Code zu debuggen, werden Sie höchstwahrscheinlich feststellen, dass Ihr RER kein gültiges Kontext-Token erhalten hat (SPRemoteEventProperties.ContextToken ist eine leere Zeichenfolge). Zusätzlich die Art, wie Sie Ihren Kontext mit Konstruktor

erstellen behandelt nicht mit Authentifizierung. Sie haben Token-Methoden, um das zu tun.

var context = TokenHelper.CreateRemoteEventReceiverClientContext(properties) 

Dies wird einen gültigen Kontext zurückgeben, solange dieses Ereignis im App Web ist. Wenn das Problem dadurch nicht Ihr Problem, das Sie wird Berechtigungen Verwendung App wechseln müssen in Ihrem AppManifest und bauen eine richtige Realm von Ihrem SPHostUrl

var siteUrl = properties.Site.Url; 
var siteUri = new Uri(siteUrl); 
var realm = TokenHelper.GetRealmFromTargetUrl(siteUri); 
var token = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken; 
using (var context = TokenHelper.GetClientContextWithAccessToken(siteUrl, token)) 
{ 
} 

Lassen Sie mich wissen, ob das hilft.

+0

Hmm, ich kann scheinbar nicht auf 'TokenHelper' zugreifen. – Khaine775

+0

Es sollte innerhalb Ihres Add-In-Web-Codes wie die 'SharePointContext'-Klasse im Stammverzeichnis des Projekts sein – nizzik

Verwandte Themen