Erste Schritte mit SharePoint-WebhooksGet started with SharePoint webhooks

In diesem Artikel wird beschrieben, wie Sie eine Anwendung zum Hinzufügen und Bearbeiten von SharePoint-Webhook-Anforderungen erstellen. Sie erfahren, wie Sie SharePoint-Webhook-Anforderungen mit dem Postman-Client schnell erstellen und ausführen können, unter Verwendung einer einfachen ASP.NET-Web-API als Webhook-Empfänger.This article describes how to build an application that adds and handles SharePoint webhook requests. You will learn how to use Postman client to construct and execute SharePoint webhook requests quickly while interacting with a simple ASP.NET Web API as the webhook receiver.

Sie werden mit einfachen HTTP-Anforderungen arbeiten, die ideal geeignet sind, um Ihnen einen ersten Einblick in die Funktionsweise von Webhooks zu verschaffen.You will use plain HTTP requests, which is useful for helping you understand how webhooks work.

Damit Sie die Schritt-für-Schritt-Anleitungen in diesem Artikel nachvollziehen können, müssen Sie die folgenden Tools herunterladen und installieren:To complete the step-by-step instructions in this article, download and install the following tools:

Schritt 1: Registrieren Sie eine Azure AD-Anwendung den Postman-ClientStep 1: Register an Azure AD application for Postman client

Damit der Postman-Client mit SharePoint kommunizieren kann, müssen Sie eine Microsoft Azure Active Directory (Azure AD)-App in dem Azure AD-Mandanten registrieren, der mit Ihrem Office 365-Mandanten verknüpft ist.In order for the Postman client to communicate with SharePoint, you need to register a Microsoft Azure Active Directory (Azure AD) app in your Azure AD tenant associated with your Office 365 tenant.

  1. Registrieren Sie die Anwendung unbedingt als Webanwendung.Ensure that you register the application as a Web Application.

  2. Für den Zugriff auf SharePoint Online ist es wichtig, der Azure AD-App Berechtigungen für die Office 365 SharePoint Online-Anwendung zu gewähren und die Berechtigung read and write items and lists in all site collections auszuwählen.To access SharePoint Online, it's important to grant the Azure AD app permissions to the Office 365 SharePoint Online application and select the read and write items and lists in all site collections permission.

    Hinweis

    Weitere Informationen dazu, wie Sie Azure AD-Anwendungen hinzufügen und Anwendungen Berechtigungen gewähren können, finden Sie unter Hinzufügen einer Anwendung.For more information about adding an Azure AD application and granting permissions to applications, see Adding an application.

  3. Geben Sie den folgenden Endpunkt als Antwort (Umleitungs)-URL für die App ein. An diesen Endpunkt wird Azure AD die Authentifizierungsantwort senden. Bei erfolgreicher Authentifizierung enthält diese das Zugriffstoken.Enter the following endpoint as the Reply (Redirect) URL for the app. This is the endpoint to which Azure AD will send the authentication response, including the access token, if authentication was successful.

    https://www.getpostman.com/oauth2/callback
    
  4. Generieren Sie einen Schlüssel, der als geheimer Clientschlüssel fungiert.Generate a Key, which will be the client secret.

  5. Die folgenden Eigenschaften werden in späteren Schritten benötigt. Kopieren Sie sie also an einen sicheren Ort:The following properties are required in later steps, so copy them to a safe place:

    • Client-IDClient Id
    • Client SecretClient Secret

Schritt 2: Erstellen eines Webhook-EmpfängersStep 2: Build a webhook receiver

In diesem Beispiel erstellen Sie den Webhook-Empfänger mit einem Visual Studio-Web-API-Projekt.For this project, use the Visual Studio Web API project to build the webhook receiver.

Erstellen eines neuen ASP.NET-Web-API-ProjektsCreate a new ASP.NET Web API project

  1. Öffnen Sie Visual Studio.Open Visual Studio.

  2. Wählen Sie Datei > Neu > Projekt.Select File > New > Project.

  3. Wählen Sie im Bereich Vorlagen die Option Installed Templates aus, und erweitern Sie den Knoten Visual C#.In the Templates pane, select Installed Templates, and expand the Visual C# node.

  4. Wählen Sie unter Visual C# die Option Web aus.Under Visual C#, select Web.

  5. Wählen Sie aus der Liste der Projektvorlagen die Option ASP.NET-Webanwendung aus.In the list of project templates, select ASP.NET Web Application.

  6. Nennen Sie das Projekt SPWebhooksReceiver, und wählenSie OK.Name the project SPWebhooksReceiver, and select OK.

  7. Wählen Sie im Dialogfeld Neues ASP.NET-Projekt die Vorlage Web API aus der Gruppe ASP.NET 4.5 aus.In the New ASP.NET Project dialog, select the Web API template from the ASP.NET 4.5. group.

  8. Ändern Sie die Authentifizierungsoption in Keine Authentifizierung. Wählen Sie dazu die Schaltfläche Authentifizierung ändern.Change the authentication to No Authentication by selecting the Change Authentication button.

  9. Wählen Sie OK, um das Web-API-Projekt zu erstellen.Select OK to create the Web API project.

Hinweis

Sie können das Kontrollkästchen In der Cloud hosten deaktivieren, da Sie dieses Projekt nicht in der Cloud bereitstellen werden.You can clear the Host in the cloud check box because this project will not be deployed to the cloud.

Visual Studio erstellt nun Ihr Projekt.Visual Studio creates your project.

Erstellen des Webhook-EmpfängersBuild the webhook receiver

Installieren der NuGet-PaketeInstall NuGet packages

Verwenden Sie die ASP.NET-Web-API-Ablaufverfolgung zur Protokollierung der eingehenden SharePoint-Anforderungen.Use ASP.NET Web API Tracing to log the requests coming from SharePoint. Gehen Sie wie folgt vor, um das Paket für die Ablaufverfolgung zu installieren:The following steps install the tracing package:

  1. Wechseln Sie in Visual Studio zum Projektmappen-Explorer.Go to Solution Explorer in Visual Studio.

  2. Öffnen Sie per Rechtsklick das Kontextmenü des Projekts, und wählen Sie NuGet-Pakete verwalten aus.Open the context menu (right-click) for the project, and select Manage NuGet Packages.

  3. Geben Sie Microsoft.AspNet.WebApi.Tracing in das Suchfeld ein.In the search box, enter Microsoft.AspNet.WebApi.Tracing.

  4. Wählen Sie aus den Suchergebnissen das Paket Microsoft.AspNet.WebApi.Tracing aus, und wählen Sie dann Installieren, um das Paket zu installieren.In the search results, select the Microsoft.AspNet.WebApi.Tracing package, and then select Install to install the package.

Erstellen des SPWebhookNotification-ModellsBuild SPWebhookNotification model

Jede vom Dienst generierte Benachrichtigung wird in eine WebhookNotification-Instanz serialisiert.Each notification generated by the service is serialized into a webhookNotification instance. Sie müssen ein einfaches Modell erstellen, das diese Benachrichtigungsinstanz abbildet.You need to build a simple model that represents this notification instance.

  1. Wechseln Sie in Visual Studio zum Projektmappen-Explorer.Go to Solution Explorer in Visual Studio.

  2. Öffnen Sie per Rechtsklick das Kontextmenü des Ordners Models, und wählen Sie Hinzufügen > Klasse aus.Open the context menu (right-click) for the Models folder, and select Add > Class.

  3. Geben Sie SPWebhookNotification als Name für die Klasse ein, und wählen Sie Hinzufügen aus, um die Klasse zu Ihrem Projekt hinzuzufügen.Enter SPWebhookNotification as the class name and select Add to add the class to your project.

  4. Tragen Sie den folgenden Code in den Body der Klasse SPWebhookNotification ein:Add the following code to the body of the SPWebhookNotification class:

    public string SubscriptionId { get; set; }
    
    public string ClientState { get; set; }
    
    public string ExpirationDateTime { get; set; }
    
    public string Resource { get; set; }
    
    public string TenantId { get; set; }
    
    public string SiteUrl { get; set; }
    
    public string WebId { get; set; }
    

Erstellen des SPWebhookContent-ModellsBuild SPWebhookContent model

Da in einer einzigen Anforderung mehrere Benachrichtigungen an einen Webhook-Empfänger gesendet werden können, werden alle Anforderungen in einem Objekt mit einem einzigen Arraywert zusammengefasst. Erstellen Sie ein einfaches Modell, das dieses Array abbildet.Because multiple notifications can be submitted to your webhook receiver in a single request, they are combined together in an object with a single array value. Build a simple model that represents the array.

  1. Wechseln Sie in Visual Studio zum Projektmappen-Explorer.Go to Solution Explorer in Visual Studio.

  2. Öffnen Sie per Rechtsklick das Kontextmenü des Ordners Models, und wählen Sie Hinzufügen > Klasse aus.Open the context menu (right-click) for the Models folder, and select Add > Class.

  3. Geben Sie SPWebhookContent als Name für die Klasse ein, und wählen Sie Hinzufügen aus, um die Klasse zu Ihrem Projekt hinzuzufügen.Enter SPWebhookContent as the class name, and select Add to add the class to your project.

  4. Tragen Sie den folgenden Code in den Body der Klasse SPWebhookContentein:Add the following code to the body of the SPWebhookContent class:

     public List<SPWebhookNotification> Value { get; set; }
    

Hinzufügen des SharePoint-Webhook-ClientstatusAdd SharePoint webhook client state

Webhooks erlauben die Verwendung eines optionalen Zeichenfolgenwerts, der in der Benachrichtigungsmitteilung für Ihr Abonnement zurückgegeben wird. Anhand dieses Werts lässt sich verifizieren, dass die Anforderung wirklich von einer vertrauenswürdigen Quelle stammt, in diesem Fall von SharePoint.Webhooks provide the ability to use an optional string value that is passed back in the notification message for your subscription. This can be used to verify that the request is indeed coming from the source you trust, which in this case is SharePoint.

Fügen Sie einen Clientzustandswert hinzu, mit dem die Anwendung die eingehenden Anforderungen verifizieren kann.Add a client state value with which the application can verify the incoming requests.

  1. Wechseln Sie in Visual Studio zum Projektmappen-Explorer.Go to Solution Explorer in Visual Studio.

  2. Öffnen Sie die Datei web.config, und fügen Sie den folgenden Schlüssel als Clientzustand im Abschnitt <appSettings> hinzu:Open the web.config file, and add the following key as the client state to the <appSettings> section:

    <add key="webhookclientstate" value="A0A354EC-97D4-4D83-9DDB-144077ADB449"/>
    

Aktivieren der AblaufverfolgungEnable tracing

Aktivieren Sie in der Datei web.config die Ablaufverfolgung, indem Sie den folgenden Schlüssel im Element <system.web> im Abschnitt <configuration> hinzufügen:In the web.config file, enable tracing by adding the following key inside the <system.web> element in the <configuration> section:

<trace enabled="true"/>

Da ein Ablauf-Writer erforderlich ist, müssen Sie einen Ablauf-Writer zur Controllerkonfiguration hinzufügen. (Verwenden Sie für dieses Beispiel den Writer unter System.Diagnostics.)A trace writer is required, so you must add a trace writer to the controller configuration (in this case use the one from System.Diagnostics).

  1. Wechseln Sie in Visual Studio zum Projektmappen-Explorer.Go to Solution Explorer in Visual Studio.

  2. Öffnen Sie WebApiConfig.cs im Ordner App_Start.Open WebApiConfig.cs in the App_Start folder.

  3. Fügen Sie die folgende Zeile in die Methode Register ein:Add the following line inside the Register method:

    config.EnableSystemDiagnosticsTracing();
    

Erstellen des SharePoint-Webhook-ControllersBuild SharePoint webhook controller

Jetzt erstellen Sie den Webhook-Empfänger-Controller, der die eingehenden Anforderungen von SharePoint bearbeiten und die entsprechenden Aktionen einleiten wird.Now build the webhook receiver controller that handles the incoming requests from SharePoint and take action accordingly.

  1. Wechseln Sie in Visual Studio zum Projektmappen-Explorer.Go to Solution Explorer in Visual Studio.

  2. Öffnen Sie per Rechtsklick das Kontextmenü des Ordners Controllers, und wählen Sie Hinzufügen > Controller aus.Open the context menu (right-click) for the Controllers folder, and select Add > Controller.

  3. Wählen Sie im Dialogfeld Gerüst hinzufügen die Option Web API 2-Controller – Leer aus.In the Add Scaffold dialog, select Web API 2 Controller - Empty.

  4. Klicken Sie auf Hinzufügen.Select Add.

  5. Nennen Sie den Controller SPWebhookController, und wählen Sie Hinzufügen aus, um den API-Controller zu Ihrem Projekt hinzuzufügen.Name the controller SPWebhookController, and select Add to add the API controller to your project.

  6. Ersetzen Sie die Anweisungen des Typs using durch den folgenden Code:Replace the using statements with the following code:

    using Newtonsoft.Json;
    using SPWebhooksReceiver.Models;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.Http;
    using System.Web.Http.Tracing;
    
  7. Ersetzen Sie den Code in der Klasse SPWebhookController durch den folgenden Code:Replace the code in the SPWebhookController class with the following code:

    [HttpPost]
    public HttpResponseMessage HandleRequest()
    {
        HttpResponseMessage httpResponse = new HttpResponseMessage(HttpStatusCode.BadRequest);
        var traceWriter = Configuration.Services.GetTraceWriter();
        string validationToken = string.Empty;
        IEnumerable<string> clientStateHeader = new List<string>();
        string webhookClientState = ConfigurationManager.AppSettings["webhookclientstate"].ToString();
    
        if (Request.Headers.TryGetValues("ClientState", out clientStateHeader))
        {
            string clientStateHeaderValue = clientStateHeader.FirstOrDefault() ?? string.Empty;
    
            if (!string.IsNullOrEmpty(clientStateHeaderValue) && clientStateHeaderValue.Equals(webhookClientState))
            {
                traceWriter.Trace(Request, "SPWebhooks", 
                    TraceLevel.Info, 
                    string.Format("Received client state: {0}", clientStateHeaderValue));
    
                var queryStringParams = HttpUtility.ParseQueryString(Request.RequestUri.Query);
    
                if (queryStringParams.AllKeys.Contains("validationtoken"))
                {
                    httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
                    validationToken = queryStringParams.GetValues("validationtoken")[0].ToString();
                    httpResponse.Content = new StringContent(validationToken);
    
                    traceWriter.Trace(Request, "SPWebhooks", 
                        TraceLevel.Info, 
                        string.Format("Received validation token: {0}", validationToken));                        
                    return httpResponse;
                }
                else
                {
                    var requestContent = Request.Content.ReadAsStringAsync().Result;
    
                    if (!string.IsNullOrEmpty(requestContent))
                    {
                        SPWebhookNotification notification = null;
    
                        try
                        {
                            var objNotification = JsonConvert.DeserializeObject<SPWebhookContent>(requestContent);
                            notification = objNotification.Value[0];
                        }
                        catch (JsonException ex)
                        {
                            traceWriter.Trace(Request, "SPWebhooks", 
                                TraceLevel.Error, 
                                string.Format("JSON deserialization error: {0}", ex.InnerException));
                            return httpResponse;
                        }
    
                        if (notification != null)
                        {
                            Task.Factory.StartNew(() =>
                            {
                                 //handle the notification here
                                 //you can send this to an Azure queue to be processed later
                                //for this sample, we just log to the trace
    
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("Resource: {0}", notification.Resource));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("SubscriptionId: {0}", notification.SubscriptionId));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("TenantId: {0}", notification.TenantId));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("SiteUrl: {0}", notification.SiteUrl));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("WebId: {0}", notification.WebId));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("ExpirationDateTime: {0}", notification.ExpirationDateTime));
    
                            });
    
                            httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
                        }
                    }
                }
            }
            else
            {
                httpResponse = new HttpResponseMessage(HttpStatusCode.Forbidden);
            }
        }
    
        return httpResponse;
    }
    
  8. Speichern Sie die Datei.Save the file.

Schritt 3: Debuggen des Webhook-EmpfängersStep 3: Debug the webhook receiver

  1. Wählen Sie F5 aus, um den Webhook-Empfänger zu debuggen.Select F5 to debug the webhook receiver.

  2. Kopieren Sie die Portnummer aus der Adressleiste, sobald sich der Browser öffnet.When you have the browser open, copy the port number from the address bar. Beispiel: http://localhost:<_port-number_>For example: http://localhost:<_port-number_>

Schritt 4: Ausführen des ngrok-ProxysStep 4: Run ngrok proxy

  1. Öffnen Sie ein Konsolenterminal.Open a console terminal.

  2. Wechseln Sie zum extrahierten ngrok-Ordner.Go to the extracted ngrok folder.

  3. Geben Sie Folgendes mit der Portnummern-URL aus dem vorherigen Schritt ein, um ngrok zu starten:Enter the following with the port number URL from the previous step to start ngrok:

    ./ngrok http port-number --host-header=localhost:port-number
    

    ngrok sollte jetzt ausgeführt werden.You should see ngrok running.

  4. Kopieren Sie die HTTPS-Adresse unter Forwarding. Diese Adresse wird der Dienstproxy, an den SharePoint Anforderungen sendet.Copy the Forwarding HTTPS address. You will use this address as the service proxy for SharePoint to send requests.

Schritt 5: Hinzufügen eines Webhook-Abonnements mit PostmanStep 5: Add webhook subscription using Postman

Abrufen eines neuen ZugriffstokensGet new access token

Postman macht die Arbeit mit APIs sehr einfach. Im ersten Schritt konfigurieren Sie Postman für die Azure AD-Authentifizierung, damit Sie API-Anforderungen an SharePoint senden können. Dazu verwenden Sie die Azure AD-App, die Sie in Schritt 1 registriert haben.Postman makes it really simple to work with APIs. The first step is to configure Postman to authenticate with Azure AD so you can send API requests to SharePoint. You will use the Azure AD app that you registered in Step 1.

  1. Öffnen Sie Postman.Open Postman. Sie sehen die Sidebar und den Request Editor.You are presented with a Sidebar and Request Editor.

  2. Wählen Sie die Registerkarte Authorization im Request Editor aus.Select the Authorization tab in the Request Editor.

  3. Wählen Sie OAuth 2.0 in der Liste Typ aus.Select OAuth 2.0 in the Type list.

  4. Wählen Sie die Schaltfläche Get New Access Token aus.Select the Get New Access Token button.

  5. Geben Sie im Dialogfenster Folgendes ein:In the dialog window, enter the following:

    • Auth URL:Auth URL:
      • https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2F<_your-sharepoint-tenant-url-without-https_>
      • Ersetzen Sie your-sharepoint-tenant-url-without-https mit Ihrer Mandanten-URL ohne das Präfix Https.Replace your-sharepoint-tenant-url-without-https with your tenant url without the https prefix.
    • Zugriffstoken-URL: https://login.microsoftonline.com/common/oauth2/tokenAccess Token URL: https://login.microsoftonline.com/common/oauth2/token
    • Client-ID: Client-ID der App, die Sie zuvor in Schritt 1 registriert haben.Client Id: Client Id of the app you registered previously in Step one.
    • Geheimer Clientschlüssel: Geheimer Clientschlüssel der App, den Sie zuvor in Schritt 1 registriert haben.Client Secret: Client Secret of the app you registered previously in Step one.
    • Tokenname: sp_webhooks_tokenToken name: sp_webhooks_token
    • Autorisierungstyp: AutorisierungscodeGrant type: Authorization Code
  6. Wählen Sie Request Token aus, um sich anzumelden, zuzustimmen und das Token für die Sitzung abzurufen.Select the Request Token to sign in, consent, and get the token for the session.

  7. Sobald das Token abgerufen wurde, sollte die Variable access_token auf der Registerkarte Authorization angezeigt werden.When the token is successfully retrieved, you should see access_token variable added to the Authorization tab.

  8. Wählen Sie die Option Add token to header aus.Select the option to Add token to header.

  9. Doppelklicken Sie auf die Variable access_token, um das Token zum Header der Anforderung hinzuzufügen.Double-click the access_token variable to add the token to the header for the request.

    Abrufen eines neuen Zugriffstokens von Postman

Abrufen der ID der Liste „Dokumente“Get Documents list Id

Sie müssen die Webhooks für die Standarddokumentbibliothek verwalten, die in Ihrer Standardwebsitesammlung unter dem Namen Dokumente bereitgestellt wird. Senden Sie zum Abrufen der ID dieser Liste eine GET-Anforderung:You need to manage webhooks for the default document library, which is provisioned in your default site collection under the name Documents. Get the Id of this list by issuing a GET request:

  1. Geben Sie die folgende Anforderungs-URL ein:Enter the following request URL:

    https://site-collection/_api/web/lists/getbytitle('Documents')?$select=Title,Id
    
  2. Tragen Sie für site-collection Ihre Websitesammlung ein.Replace site-collection with your site collection.

    Postman führt nun Ihre Anforderung aus. Ist die Ausführung erfolgreich, wird das Ergebnis angezeigt.Postman executes your request and if successful, you should see the result.

  3. Kopieren Sie aus den Ergebnissen den Wert für Id. Den Wert Id verwenden Sie später zur Erstellung von Webhook-Anforderungen.Copy the Id from the results. Later you will use the Id to make webhook requests.

Hinzufügen eines Webhook-AbonnementsAdd webhook subscription

Da Sie nun alle erforderlichen Informationen haben, können Sie die Abfrage und die Anforderung zum Hinzufügen eines Webhook-Abonnements erstellen. Führen Sie im Request Editor die folgenden Schritte durch:Now that you have the required information, construct the query and the request to add a webhook subscription. Use the request editor for the following steps:

  1. Ändern Sie die Anforderung in POST statt GET.Change the request to POST from GET.

  2. Geben Sie die folgende Anforderungs-URL ein:Enter the following as the request URL:

    https://site-collection/_api/web/lists('list-id')/subscriptions
    
  3. Tragen Sie für site-collection Ihre Websitesammlung ein.Replace site-collection with your site collection.

  4. Wechseln Sie zur Registerkarte Headers.Go to the Headers tab.

  5. Vergewissern Sie sich, dass der Authorization-Header übernommen wurde.Make sure you still have the Authorization header. Ist das nicht der Fall, müssen Sie ein neues Zugriffstoken anfordern.If not, you need to request a new access token.

  6. Fügen Sie die folgenden Paare des Typs key > value für den Header hinzu:Add the following header key > value pairs:

    • Accept > application/json;odata=nometadataAccept > application/json;odata=nometadata
    • Content-Type > application/jsonContent-Type > application/json
  7. Wechseln Sie zur Registerkarte Body, und wählen Sie als Format raw aus.Go to the Body tab and select raw format.

  8. Fügen Sie den folgenden JSON-Text als Body ein:Paste the following JSON as the body:

    {
      "resource": "https://site-collection/_api/web/lists('list-id')",
      "notificationUrl": "https://ngrok-forwarding-address/api/spwebhook/handlerequest",
      "expirationDateTime": "2016-10-27T16:17:57+00:00",
      "clientState": "A0A354EC-97D4-4D83-9DDB-144077ADB449"
    }
    

    Hinzufügen eines Webhook-Bodys in Postman

  9. Stellen Sie sicher, dass der Wert expirationDateTime höchstens 6 Monate in der Zukunft liegt, gerechnet vom aktuellen Datum.Make sure the expirationDateTime is at most 6 months from today.

  10. Stellen Sie sicher, dass Sie den Webhook-Empfänger wie in Schritt 4 beschrieben debuggen.Make sure you are debugging the webhook receiver as in Step 4.

  11. Wählen Sie Send aus, um die Anforderung auszuführen.Select Send to execute the request.

    Kann die Anforderung ausgeführt werden, sollten Sie eine Antwort von SharePoint mit den Abonnementdetails sehen. Hier ein Beispiel einer Antwort für ein neu erstelltes Abonnement:If the request is successful, you should see the response from SharePoint that provides the subscription details. The following example shows a response for a newly created subscription:

    {
      "clientState": "A0A354EC-97D4-4D83-9DDB-144077ADB449",
      "expirationDateTime": "2016-10-27T16:17:57Z",
      "id": "32b95d9-4d20-4a17-bfa3-2957cb38ead8",
      "notificationUrl": "https://85557d4b.ngrok.io/api/spwebhook/handlerequest",
      "resource": "c34420f9-2ad7-4e54-94c9-b67798d2299b"
    }
    
  12. Kopieren Sie den Wert id des Abonnements. Sie benötigen ihn für die nächsten Anforderungen.Copy the subscription id. You will need it for the next set of requests.

  13. Gehen Sie zum Webhook-Empfänger-Projekt in Visual Studio, und schauen Sie ins Fenster Ausgabe. Hier sollten die Ablaufprotokolle und andere Nachrichten angezeigt werden. Die Ablaufprotokolle sollten in etwa wie diese Ablaufverfolgung aussehen:Go to the webhook receiver project in Visual Studio and examine the Output window. You should see the trace logs that look similar to the following trace, along with other messages:

    iisexpress.exe Information: 0 : Message='Received client state: A0A354EC-97D4-4D83-9DDB-144077ADB449'
    iisexpress.exe Information: 0 : Message='Received validation token: daf2803c-43cf-44c7-8dff-7066eaa40f13'
    

    Die Ablaufverfolgung meldet, dass der anfänglich empfangene Webhook eine Prüfungsanforderung empfangen hat. Sie sehen im Code, dass das Prüfungstoken sofort zurückgegeben wird, so dass SharePoint die Anforderungen überprüfen kann:The trace indicates that the webhook received initially received a validation request. If you look at the code, you'll see that it returns the validation token immediately so that SharePoint can validate the request:

    if (queryStringParams.AllKeys.Contains("validationtoken"))
    {
        httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
        validationToken = queryStringParams.GetValues("validationtoken")[0].ToString();
        httpResponse.Content = new StringContent(validationToken);
    
        traceWriter.Trace(Request, "SPWebhooks", 
            TraceLevel.Info, 
            string.Format("Received validation token: {0}", validationToken));                        
        return httpResponse;
    }
    

Schritt 6: Abrufen der AbonnementdetailsStep 6: Get subscription details

Jetzt führen Sie Abfragen in Postman aus, um die Abonnementdetails abzurufen.Now you'll run queries in Postman to get the subscription details.

  1. Öffnen Sie den Postman-Client.Open the Postman client.

  2. Ändern Sie die Anforderung in GET statt POST.Change the request to GET from POST.

  3. Geben Sie Folgendes als Anforderung ein:Enter the following as the request:

    https://site-collection/_api/web/lists('list-id')/subscriptions
    
  4. Tragen Sie für site-collection Ihre Websitesammlung ein.Replace site-collection with your site collection.

  5. Wählen Sie Send aus, um die Anforderung auszuführen.Select Send to execute the request.

    Kann die Anforderung ausgeführt werden, gibt SharePoint die Abonnements für diese Listenressource zurück. Da Sie gerade eins hinzugefügt haben, sollte mindestens ein Abonnement zurückgegeben werden. Hier ein Beispiel für eine Antwort mit einem Abonnement:If successful, you should see SharePoint return the subscriptions for this list resource. Because we just added one, you should at least see one subscription returned. The following example shows a response with one subscription:

    {
      "value": [
        {
          "clientState": "A0A354EC-97D4-4D83-9DDB-144077ADB449",
          "expirationDateTime": "2016-10-27T16:17:57Z",
          "id": "32b95add-4d20-4a17-bfa3-2957cb38ead8",
          "notificationUrl": "https://85557d4b.ngrok.io/api/spwebhook/handlerequest",
          "resource": "c34420f9-2a67-4e54-94c9-b67798229f9b"
        }
      ]
    }
    
  6. Rufen Sie die Details dieses Abonnements mit der folgenden Abfrage ab:Run the following query to get details of the specific subscription:

    https://site-collection/_api/web/lists('list-id')/subscriptions('subscription-id')
    
  7. Ersetzen Sie subscription-id durch Ihre Abonnement-ID.Replace subscription-id with your subscription id.

Schritt 7: Testen der Webhook-BenachrichtigungenStep 7: Test webhook notification

Nun fügen Sie eine Datei zur Bibliothek „Dokumente“ hinzu und testen, ob Sie im Webhook-Empfänger eine Benachrichtigung von SharePoint erhalten.Now add a file to the Documents library and test if you get a notification from SharePoint in the webhook receiver.

  1. Wechseln Sie zu Visual Studio.Go to Visual Studio.

  2. Platzieren Sie im SPWebhookController einen Breakpoint in der folgenden Codezeile:In the SPWebhookController, place a breakpoint on the following line of code:

    var requestContent = Request.Content.ReadAsStringAsync().Result;
    
  3. Gehen Sie zur Bibliothek Dokumente.Go to the Documents library. In Ihrer Standardwebsitesammlung ist dies die Bibliothek Freigegebene Dokumente.It is named Shared Documents library in your default site collection.

  4. Fügen Sie eine neue Datei hinzu.Add a new file.

  5. Gehen Sie zu Visual Studio, und warten Sie, bis der Breakpoint erreicht wird.Go to Visual Studio and wait for the breakpoint to be hit.

    Die Wartezeit kann zwischen einigen Sekunden und 5 Minuten betragen.The wait time may vary from a few seconds to up to five minutes. In dem Moment, in dem der Breakpoint erreicht ist, hat der Webhook-Empfänger eine Benachrichtigung von SharePoint erhalten.When the breakpoint is hit, the webhook receiver has just received a notification from SharePoint.

  6. Wählen Sie F5 aus, um fortzufahren.Select F5 to continue.

  7. Die Benachrichtigungsdaten finden Sie im Fenster Ausgabe in den folgenden Einträgen, da Sie sie zum Ablaufprotokoll hinzugefügt haben:To see the notification data, look in the Output window for the following entries, since you added the notification data into the trace log:

    iisexpress.exe Information: 0 : Message='Resource: c34420f9-2a67-4e54-94c9-b6770892299b'
    iisexpress.exe Information: 0 : Message='SubscriptionId: 32b95ad9-4d20-4a17-bfa3-2957cb38ead8'
    iisexpress.exe Information: 0 : Message='TenantId: 7a17cb7d-6898-423f-8839-45f363076f06'
    iisexpress.exe Information: 0 : Message='SiteUrl: /'
    iisexpress.exe Information: 0 : Message='WebId: 62b80e0b-f889-4974-a519-cc138413be40'
    iisexpress.exe Information: 0 : Message='ExpirationDateTime: 2016-10-27T16:17:57.0000000Z'
    

Dieses Projekt schreibt die Informationen nur ins Ablaufprotokoll.This project only writes the information to the trace log. Im Empfänger werden die Informationen jedoch an eine Tabelle oder eine Warteschlange gesendet, die die empfangenen Daten verarbeiten und die von SharePoint gesendeten Informationen auswerten kann.However, in your receiver, you send this information into a table or a queue that can process the received data to get information from SharePoint.

Mit diesen Daten können Sie die URL erstellen und über die GetChanges-API die neuesten Änderungen abrufen.With this data, you can construct the URL and use the GetChanges API to get the latest changes.

Nächste SchritteNext steps

In diesem Artikel haben Sie mithilfe des Postman-Clients und einer einfachen Web-API Webhook-Benachrichtigungen von SharePoint abonniert und empfangen.In this article, you used Postman client and a simple web API to subscribe and receive webhook notifications from SharePoint.

Sehen Sie sich als nächstes die Beispielreferenzimplementierung für SharePoint-Webhooks an. Sie gibt ein End-to-End-Beispiel, das Azure-Speicherwarteschlangen verwendet, um die Informationen zu verarbeiten, Änderungen von SharePoint abzurufen und diese Änderungen an eine SharePoint-Liste zurückzusenden.Next, take a look at SharePoint webhooks sample reference implementation, which shows an end-to-end sample that uses Azure Storage Queues to process the information, get changes from SharePoint, and push those changes back into a SharePoint list.