Share via


Stel HTTP-verzoeken samen en verwerk fouten voor de web-API van portals

Interactie met de web-API omvat het opstellen van HTTP-aanvragen met vereiste headers en het afhandelen van HTTP-reacties, inclusief eventuele fouten.

Belangrijk

  • Uw portalversie moet 9.3.3.x of hoger zijn om deze functie te laten werken.

URL voor web-API en versiebeheer

Construeer de web-API-URL met behulp van de indeling in de volgende tabel.

Onderdeel Omschrijving
Protocol https://
Basis-URL <portal-URL>
Pad van web-API _api
Bron Logische naam van de tabel die u wilt gebruiken

Gebruik deze indeling bijvoorbeeld bij het verwijzen naar een case:

https://contoso.powerappsportals.com/_api/case

Alle web-API-resources volgen de respectieve tabelmachtigingen in verband met webrollen.

HTTP-methoden

HTTP-aanvragen kunnen verschillende soorten methoden gebruiken. De web-API van portals ondersteunt echter alleen de methoden in de volgende tabel:

Wijze Gebruik
Yammer ophalen Gebruiken bij het ophalen van gegevens uit tabellen.
Post Te gebruiken bij het maken van records.
Patch Te gebruiken bij het bijwerken van tabellen of het uitvoeren van upsert-bewerkingen.
Delete Te gebruiken bij het verwijderen van records of individuele veldwaarden van records.
Put Te gebruiken in beperkte situaties om afzonderlijke velden van records bij te werken.

HTTP-kopteksten

De web-API ondersteunt alleen JSON. Elke HTTP-header moet het volgende bevatten:

  • Een koptekstwaarde Accepteren van application/json, zelfs als er geen antwoordtekst wordt verwacht.
  • Als de aanvraag JSON-gegevens in de aanvraagbody bevat, moet u een Content-Type-header met een waarde vanapplication/json opnemen.

De huidige OData-versie is 4.0, maar toekomstige versies kunnen nieuwe mogelijkheden bieden. Gebruik de volgende syntaxis om ervoor te zorgen dat er geen onduidelijkheid bestaat over de OData-versie die in de toekomst op uw code wordt toegepast:

Syntaxis

Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0

Voorbeeld: Wrapper AJAX-functie voor het CSRF-token

	(function(webapi, $){
		function safeAjax(ajaxOptions) {
			var deferredAjax = $.Deferred();
	
			shell.getTokenDeferred().done(function (token) {
				// add headers for ajax
				if (!ajaxOptions.headers) {
					$.extend(ajaxOptions, {
						headers: {
							"__RequestVerificationToken": token
						}
					}); 
				} else {
					ajaxOptions.headers["__RequestVerificationToken"] = token;
				}
				$.ajax(ajaxOptions)
					.done(function(data, textStatus, jqXHR) {
						validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve);
					}).fail(deferredAjax.reject); //ajax
			}).fail(function () {
				deferredAjax.rejectWith(this, arguments); // on token failure, pass the token ajax and args
			});
	
			return deferredAjax.promise();	
		}
		webapi.safeAjax = safeAjax;
})(window.webapi = window.webapi || {}, jQuery)

Voorbeeld: Tabelgegevens ophalen

	webapi.safeAjax({
				type: "GET",
				url: "/_api/contacts?$select=firstname,lastname",
				contentType: "application/json",
				success: function (res) {
						console.log(res);
				}
	});

Voorbeeld: tabelgegevens maken

	webapi.safeAjax({
		type: "POST",
		url: "/_api/accounts",
		contentType: "application/json",
		data: JSON.stringify({
			"name": "Sample Account"
		}),
		success: function (res, status, xhr) {
			console.log("entityID: "+ xhr.getResponseHeader("entityid"))
		}
	});

Voorbeeld: tabelgegevens bijwerken

		webapi.safeAjax({
		type: "PATCH",
		url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
		contentType: "application/json",
		data: JSON.stringify({
			"name": "Sample Account - Updated"
		}),
		success: function (res) {
			console.log(res);
		}
	});

Voorbeeld: tabelgegevens verwijderen

		webapi.safeAjax({
		type: "DELETE",
		url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
		contentType: "application/json",
		success: function (res) {
			console.log(res);
		}
	});

Statuscodes identificeren

Elke respons op een HTTP-aanvraag bevat een statuscode. Hierna volgen statuscodes die door de web-API voor portals worden geretourneerd:

Code Omschrijving Type
200 OK U kunt deze respons verwachten als uw bewerking gegevens retourneert in de responstekst. Succes
204 Geen inhoud U kunt deze respons verwachten als uw bewerking is geslaagd, maar geen gegevens retourneert in de responstekst. Succes
403 Verboden U kunt deze respons verwachten voor de volgende fouttypen:
  • AccessDenied
  • AttributePermissionIsMissing
  • TablePermissionWriteIsMissingDuringUpdate
  • TablePermissionCreateIsMissing
  • TablePermissionDeleteIsMissing
  • TablePermissionAppendIsMissngDuringAssociationChange
  • TablePermissionAppendToIsMissingDuringAssociateChange
Clientfout
401 Onbevoegd U kunt deze respons verwachten voor de volgende fouttypen:
  • MissingPortalRequestVerificationToken
  • MissingPortalSessionCookie
Clientfout
413 Nettolading te groot Verwacht deze respons als de aanvraaglengte te groot is. Clientfout
400 Onjuiste aanvraag Verwacht deze respons als een argument ongeldig is.
InvalidAttribute
Clientfout
404 Niet gevonden Verwacht deze respons als de resource niet bestaat.
De tabel wordt niet weergegeven voor de web-API.
Clientfout
405 Methode niet toegestaan Deze fout treedt op voor onjuiste combinaties van methode en resource. U kunt bijvoorbeeld niet DELETE of PATCH gebruiken voor een verzameling van tabellen. Deze situatie op optreden bij de volgende fouttypen:
  • InvalidOperation
  • NotSupported
Clientfout
501 Niet geïmplementeerd Verwacht deze respons als een aangevraagde bewerking niet is geïmplementeerd. Serverfout.
503 Service niet beschikbaar Verwacht deze respons als de web-API-service niet beschikbaar is. Serverfout.

Parseerfouten van de respons

Bekijk de volgende voorbeeld-HTTP-respons die nog steeds de interne fout bevat:

{
  "error":{
    "code": "This code is not related to the http status code and is frequently empty",
    "message": "A message describing the error",
    "cdscode": "Dataverse error code",
    "innererror": {
        "code": "800xxxx",
        "message": "A message describing the error. This is frequently the same as the outer message.."
      }
    }
  }

Foutcodes

Foutcodes worden weergegeven in hexadecimale indeling voor alle behandelde scenario's. In de volgende tabel wordt elke foutcode met de bijbehorende naam en bericht weergegeven.

Foutcode Foutnaam Foutbericht
900400FF NoAttributesForTableCreate Geen kenmerken voor actie Tabel maken.
90040100 InvalidAttribute Kenmerk {0} is niet gevonden voor tabel {1}.
90040101 AttributePermissionIsMissing Kenmerk {0} in tabel {1} is niet ingeschakeld voor web-API.
90040102 TablePermissionWriteIsMissingDuringUpdate U bent niet gemachtigd om entiteit {0} bij te werken.
90040103 TablePermissionCreateIsMissing U bent niet gemachtigd entiteit {0} te maken.
90040104 TablePermissionDeleteIsMissing U bent niet gemachtigd entiteit {0) te verwijderen.
90040105 TablePermissionAppendIsMissngDuringAssociationChange U bent niet gemachtigd om tabel {0} te koppelen aan of los te koppelen van {1}.
90040106 TablePermissionAppendToIsMissingDuringAssociationChange U bent niet gemachtigd om tabel {1} te koppelen aan of los te koppelen van {0}
90040107 HttpAntiForgeryException Het cookietoken tegen vervalsing en het formulierveldtoken komen niet overeen.
90040109 MissingPortalSessionCookie Er is een ongeldig sessietoken doorgegeven aan de uitvoeringsmethode.
9004010C ResourceDoesNotExists Resource niet gevonden voor segment '{0}'.
9004010D CDSError CDS-fout opgetreden.

Respons voor niet-verwerkte fouten met HTTP-statuscode 500 retourneert de fout 'Er is een onverwachte fout opgetreden bij het verwerken van de aanvraag'.

Zie ook