Programmēšana

Kā strādāt ar satura sarunām Web API

ASP.Net Web API ir viegls ietvars, kas tiek izmantots bezvalstnieku un RESTful HTTP pakalpojumu veidošanai. RESTful pakalpojumi ir viegli, bezvalstnieki, klienta-servera bāzes, kešatmiņā saglabāti pakalpojumi, kuru pamatā ir resursu jēdziens. REST ir arhitektūras stils - ierobežojumu kopums, ko izmanto bezvalstnieku pakalpojumu ieviešanai. Tā ir arhitektūras paradigma, ko izmanto, lai izveidotu atkārtoti izmantojamus, pielāgojamus pakalpojumus.

Resursa attēlojums pieprasītajā formātā ir interesanta tēma, jo jūs bieži vēlaties izmantot savus pakalpojumus no dažāda veida ierīcēm. Satura sarunas ir viens no vissvarīgākajiem Web API jēdzieniem. Lai arī samērā vienkāršs jēdziens, šajā tēmā ir daudz nepareizu priekšstatu un pārpratumu. Izstrādājot un ieviešot RESTful pakalpojumus, izmantojot Web API, jums bieži būs jārisina sarunas par saturu.

Kas ir sarunu saturs un kāpēc tas ir svarīgi?

Satura sarunas var definēt kā ienākošā HTTP pieprasījuma struktūras pārbaudes procesu, lai noteiktu labāko resursa attēlojumu no viena un tā paša resursa vairākiem pieejamajiem attēlojumiem. Būtībā sarunas par saturu ir jēdziens, kas ļauj vienam un tam pašam vietrādim URL apkalpot to pašu saturu dažādos formātos. Varat izmantot satura sarunu priekšrocības, lai izvēlētos vēlamo multivides veidu.

Tīmekļa API satura sarunas veic izpildlaiks (servera pusē), lai noteiktu multivides veida formatējumu, kas jāizmanto, lai atgrieztu atbildi uz ienākošo pieprasījumu no klienta puses.

Satura sarunu centrā ir multivides tips un multivides veida formatētājs. Kamēr pirmais attiecas uz galvenes "content-type" vērtību HTTP pieprasījumā un HTTP atbildē, otro izmanto, lai pārveidotu .NET tipus par atbilstošiem HTTP datiem un otrādi. Ņemiet vērā, ka multivides veida formatētāju Web API attēlo abstraktā klase ar nosaukumu MediaTypeFormatter.

Tīmekļa API ietvaram pēc noklusējuma ir šādi formatētāji.

  • System.Net.Http.Formatting.JsonMediaTypeFormatter
  • System.Net.Http.Formatting.XmlMediaTypeFormatter
  • System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter
  • System.Web.Http.ModelBinding.JQueryMvcFormUrlEncodedFormatter

Lai pielāgotu satura sarunas Web API, galvenais paplašināmības punkts, kas jums būtu jāizmanto, ir multivides veida kartēšana. Ņemiet vērā, ka Web API pēc noklusējuma nāk klajā ar šādiem multivides veida kartējumiem.

  • QueryStringMapping
  • UriPathExtensionMapping
  • RequestHeaderMapping
  • MediaRangeMapping

Lai izveidotu pielāgotu multivides veidu kartēšanu, jums jāizveido klase, kas paplašina MediaTypeMapping, kā parādīts zemāk esošajā koda fragmentā.

public class MediaTypeMapping: MediaTypeMapping

{

aizsargāts ignorēt dubulto OnTryMatchMediaType (HttpResponseMessage atbilde)

     {

// Uzrakstiet savu pielāgoto kodu šeit

     }

}

Šis koda fragments parāda, kā var izgūt visu atbalstīto formatētāju nosaukumus Web API, atkārtojot kolekciju HttpConfiguration.Formatters.

   [HttpGet]

publiskais saraksts GetAllFormatters ()

       {

Saraksts lstFormaters = jauns saraksts ();

foreach (var formatēt šajā. Konfigurācija. Formatē)

           {

lstFormaters.Add (formatter.GetType (). Nosaukums);

           }

atgriešanās lstFormaters;

       }

Tagad izpētīsim, kā mēs varam strādāt ar sarunām par saturu, lai izvēlētos vēlamo formatētāju un izgūtu saturu vajadzīgajā formātā. Apsveriet šādu entītijas klasi.

sabiedrības klase KlientsDTO

   {

public Int32 Id

{ gūt; komplekts; }

publiskā virkne Vārds

{ gūt; komplekts; }

publiskā virkne Uzvārds

{ gūt; komplekts; }

publiskā virkne Adrese

{ gūt; komplekts; }

   }

Pēc tam pieņemsim, ka jums ir metode, kas datus aizpilda CustomerDTO tipa sarakstā un atgriež.

privāts saraksts GetCustomerData ()

       {

Saraksts lstCustomers = jauns List ();

CustomerDTO klients = new CustomerDTO ();

klients.Id = 1;

customer.FirstName = "Joydip";

klients.LastName = "Kanjilal";

klienta adrese = "Hyderabad, India";

lstCustomers.Add (klients);

atgriezties lstCustomers;

       }

Šī Web API metode parāda, kā jūs varat atgriezt HttpResponseMessage kā atbildi no savas Web API metodes, pamatojoties uz pieejamo noklusējuma satura sarunu mehānismu.

[HttpGet]

public HttpResponseMessage GetCustomers ()

       {

Saraksts lstCustomers = GetCustomerData ();

IContentNegotiator sarunu vedējs = Configuration.Services.GetContentNegotiator ();

ContentNegotiationResult rezultāts = sarunu vedējs. Sarunas (typeof (CustomerDTO), Pieprasījums, Konfigurācija.Formatters);

atgriezt jaunu HttpResponseMessage ()

           {

Saturs = jauns ObjectContent(lstCustomers, result.Formatter, result.MediaType.MediaType)

         };

       }

Ja izmantosiet noteiktu formatētāju, kas pieejams formatētāju kolekcijā, iespējams, vēlēsities pārrakstīt to pašu metodi, kas parādīta zemāk esošajā koda fragmentā.

[HttpGet]

public HttpResponseMessage GetCustomers ()

       {

Saraksts lstCustomers = GetCustomerData ();

atgriezt jaunu HttpResponseMessage ()

           {

Saturs = jauns ObjectContent(lstCustomers, Configuration.Formatters [1])

           };

      }

Labi; bet kā tad izveidot savu pielāgoto formatētāju? Nu, lai izveidotu pielāgotu multivides tipa formatētāju, jums jāizveido klase, kas paplašina MediaTypeFormatter abstrakto klasi. Pēc tam jums vajadzētu ierakstīt pielāgoto kodu izveidotajā klasē, lai ignorētu MediaTypeFormatter abstraktās bāzes klases metodes.

public class CustomMediaTypeFormatter: MediaTypeFormatter

   {

publiskā ignorēšana bool CanReadType (tipa tips)

       {

mest jaunu NotImplementedException ();

       }

publiski ignorēt bool CanWriteType (tipa tips)

       {

mest jaunu NotImplementedException ();

       }

   }

Kad pielāgotais formatētājs ir ievietots, varat to viegli pievienot formatētāju kolekcijai:

config.Formatters.Add (new CustomMediaTypeFormatter ());

$config[zx-auto] not found$config[zx-overlay] not found