Zoeken…


ASP.NET Web API Inhoud Onderhandeling Basisinformatie

Inhoudsonderhandeling kan worden gedefinieerd als het proces van het selecteren van de beste weergave voor een bepaalde bron. Inhoudonderhandeling betekent dus dat de client en de server tussen hen kunnen onderhandelen, zodat de klant gegevens kan ophalen volgens het vereiste formaat.

Er zijn drie punten waarvan internet afhankelijk is,

  • De bron
  • Een aanwijzer naar bron (URL)
  • Vertegenwoordiging van middelen

Het derde punt is belangrijker dan andere twee, omdat alles werkt op basis van hoe we de bron kunnen zien. We kunnen een bron in twee formaten vertegenwoordigen.

  1. XML (Extensible Markup Language) -indeling
  2. JSON-indeling (JavaScript Object Notation)

Een van de normen van de RESTful-service is dat de klant moet kunnen beslissen in welk formaat hij of zij het antwoord wil, hetzij in JSON, hetzij in XML. Een verzoek dat naar de server wordt verzonden, bevat een accept-header. Met behulp van de Accept-header kan de client het formaat voor het antwoord specificeren.

Bijvoorbeeld,

Accept: application/xml retourneert resultaat in XML-indeling

Accept: application/json retourneert het resultaat in JSON-indeling

Afhankelijk van de waarde van de koptekst in de aanvraag accepteren, verzendt de server het antwoord. Dit wordt Content-onderhandeling genoemd.

Wat gebeurt er achter de schermen wanneer we gegevens in een specifiek formaat opvragen?

De ASP.NET Web API-controller genereert de gegevens die we naar de client willen verzenden en overhandigt de gegevens aan de Web API-pijplijn die vervolgens zoekt naar Accept-header van de client. Kies vervolgens een geschikte formatter om de gegevens op te maken.

Omdat ASP.NET Web API enorm uitbreidbaar is, kunnen we ook meerdere waarden opgeven voor accept-header in de aanvraag-header.

Accept: application/xml,application/json

In het bovenstaande geval kiest de server de eerste formatter om de responsgegevens op te maken.

We kunnen ook de kwaliteitsfactor opgeven in de accept-header. In dit geval kiest de server een indeling met een hogere kwaliteitsfactor.

Accept: application/json;q=0.8,application/xml;q=0.5

Als we geen Accept-header opgeven, kiest u standaard de JSON-formatter.

Wanneer het antwoord in de gevraagde indeling naar de client wordt verzonden, merk dan op dat de Content-Type kop van het antwoord op de juiste waarde is ingesteld. Als de client bijvoorbeeld application/xml heeft aangevraagd, verzendt de server de gegevens in XML-indeling en stelt ook Content-Type=application/xml .

De formatteerders worden door de server gebruikt voor zowel verzoek- als antwoordberichten. Wanneer de client een verzoek naar de server verzendt, stellen we de header Content-Type in op de juiste waarde om de server het formaat te laten weten van de gegevens die we verzenden.

Als de client bijvoorbeeld JSON-gegevens verzendt, wordt de header Content-Type ingesteld op application/json . De server weet dat het te maken heeft met JSON-gegevens, dus gebruikt het JSON-formatter om JSON-gegevens te converteren naar .NET Type. Op dezelfde manier wordt, wanneer een antwoord van de server naar de client wordt verzonden, afhankelijk van de waarde van de koptekst Accept, de juiste formatter gebruikt om het .NET-type te converteren naar JSON, XML enz.

Voorbeeld van verschillende soorten antwoordformaten:

application / json:

{
  "Email": "sample string 1",
  "HasRegistered": true,
  "LoginProvider": "sample string 3"
}

application / xml:

<UserInfoViewModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApiDemo.Models">
  <Email>sample string 1</Email>
  <HasRegistered>true</HasRegistered>
  <LoginProvider>sample string 3</LoginProvider>
</UserInfoViewModel>

Moderne web-gebaseerde applicaties kunnen gegevens in verschillende talen en formaten aanbieden. Dus als we onze API ontwikkelen voor wereldwijde gebruikers over de hele wereld, is inhoudsonderhandeling relevant.

Inhoud onderhandelen in Web API

Het concept begrijpen

Om de onderhandeling van inhoud in Web API te begrijpen, is het belangrijk om de term Resource te begrijpen.

Op internet kan alle informatie waartoe we toegang hebben, worden aangeduid als HTTP resource . Er is een enorme hoeveelheid materiaal op internet te bekijken met een ander inhoudstype, zoals HTML-documenten, afbeeldingen, video, audio, uitvoerbare bestanden, spreadsheets, enz. We kunnen elke bron verkrijgen door een http-verzoek aan de bron-uri te doen. Het http-antwoord voor het verzoek, retourneert de bron en geeft ook het inhoudstype op, also known as media type .

Om toegang te krijgen tot elke bron, kan de klant http-aanvraag doen door specifieke resource-uri en de http-werkwoorden op te geven. Daarnaast kan de klant echter ook het accept-type opgeven, dat is het formaat van de inhoud waarnaar de gebruiker op zoek is. Het 'accept-type' kan in de http-aanvraagheaders worden gedefinieerd als de “accept” header.

De server controleert vervolgens de kop "accepteren" van de aanvragen en retourneert het antwoord in het opgegeven formaat, indien beschikbaar. Houd er rekening mee dat de server het antwoord alleen in de gevraagde weergave kan retourneren als het beschikbaar is . Als de gevraagde weergave niet beschikbaar is, retourneert deze de bron in standaardweergave. Dat is de reden dat het content onderhandeling wordt genoemd.


Een praktisch voorbeeld

Neem bijvoorbeeld aan dat u een verzoek indient bij http://example.com/customer/1 om de informatie van de klant met het ID 1 op te vragen. Als u niet de kop 'accepteren' in het verzoek opgeeft, server retourneert de standaardweergave van deze bron.

Stel dat de server de klantinformatie json and xml both in json and xml both kan retourneren. Het is nu aan de klant om het vereiste formaat van de klantinformatie op te geven in de kop "accepteren" in de aanvraag. De waarde van de kop “accept” kan “application/json” voor json-weergave of “text/xml” voor xml-weergave. De server retourneert vervolgens het antwoord volgens het gevraagde formaat.

Als de gevraagde indeling "text / html" is die niet door deze host wordt ondersteund (zoals in dit voorbeeld), simply return the resource in the default format . Het http-antwoord bevat een koptekst “content-type” dat de client vertelt over het formaat van de bron.

Houd er rekening mee dat zelfs in het geval dat de gevraagde weergave van de bron niet beschikbaar is, de standaardweergave van de bron nog steeds wordt geretourneerd.

Dat is waarom het wordt aangeduid als inhoudsonderhandeling .

De client onderhandelt over de weergave van het antwoord, maar als het niet beschikbaar is, krijgt het de standaardreactie.


Hoe te configureren in Web API

In Web API kan inhoudonderhandeling worden geconfigureerd in de klasse WebAPIConfig als

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));

U kunt ook de standaard inhoudonderhandeling in de Web API overschrijven door de IContentNegotiator-interface en de bijbehorende onderhandelingsmethode te implementeren en dit vervolgens in te stellen in de Web API-aanvraagpijplijn, in het bestand WebAPI.config, zoals hieronder:

GlobalConfiguration.Configuration.Services.Replace(typeof(IContentNegotiator), new CustomContentNegotiator());

Hierna volgt een voorbeeldimplementatie van de onderhandelingsmethode.

public class CustomContentNegotiator : DefaultContentNegotiator
    {
        public override ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
        {
            var result = new ContentNegotiationResult(new JsonMediaTypeFormatter(), new MediaTypeHeaderValue("application/json"));
            return result;
        }


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow