Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 27609|Svar: 3

[WebAPI] WebAPI kan inte binda flera parametrar (SB och SB1) till innehållet i förfrågan

[Kopiera länk]
Publicerad på 2016-08-16 13:52:38 | | | |



I WebAPI kan förfrågningskroppen (HttpContent) bara läsas en gång, inte cachas och endast läsas vidare.

Till exempel:

1. Begäran: /?id=123&name=bob

    Server-side method: void Action(int id, strängnamn) // Alla parametrar är enkla typer, så de kommer alla från url:en

2. Förfrågan: /?id=123&name=bob

    Servermetod: void Action([FromUri] int id, [FromUri] strängnamn) // Samma som ovan

                      void Action ([FromBody] strängnamn); Attributet [FormBody] visar att hela kroppen läses som en sträng som ett argument

3. Begäran: /?id=123

    Klassdefinition:

publik klass Customer { // En komplex objekttyp definierad
  publik strängnamn { get; set; }
  public int Age { get; set; }
}

    Server-side metod: void Action(int id, Customer c) // Parameter id läses från frågesträngen, parameter c är en komplex Customer object-klass, läst från body via formatter

    Server-side method: void action(Customer c1, Customer c2) // Fel! Flera parametrar är komplexa typer och alla försöker läsa från en kropp, som bara kan läsas en gång

    Server-side method: void action([FromUri] Customer c1, Customer c2) // Ja! Till skillnad från åtgärden ovan läses komplex typ C1 från URL:en och C2 från brödtexten

4. ModelBinder-metoden:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Indikerar att en specifik modellbinder används för att lösa parametern

[ModelBinder(MyCustomBinder)] publik klass SomeType { } // Applicera denna regel på alla SomeType-typparametrar genom att deklarera attributet [ModelBidner(MyCustomBinder)] till en specifik typ SomeType

void Action(SomeType c) // Eftersom typen av c är SomeType tillämpas egenskaperna på SomeType för att bestämma dess modellbindning



Sammanfattning:

1. De enkla standardparametrarna skickas genom URL-parametrar, med undantag:

1.1 Om rutten innehåller id-parametern, skickas id-parametern genom rutten;

1.2 Om parametern är markerad som [FromBody], kan parametern vara en enkel parameter, och klienten kan skicka den via POST: $.ajax(url, '=value'), eller $.ajax({url: url, data: {'': 'value'}});

2. De standardkomplexa parametrarna (anpassade entitetsklasser) skickas via POST, med undantag:

2.1 Om parametervärdet markeras som [FromUri], kan parametern vara en komplex parameter;

3. En parameter märkt [FromBody] får endast visas en gång, en parameter märkt som [FromUri] kan förekomma flera gånger, och om parametern markerad som [FromUri] är en enkel parameter kan taggen tas bort.




Föregående:.NET Oracle multi-table query method, en dum metod.
Nästa:C# använder reflektion för att avgöra om en egenskap tilldelas
Publicerad på 2016-08-16 15:21:29 |
ModelBinder bör ha en featureklass för ModelBinderAttribute

Liknande filter
Publicerad på 2016-08-16 15:21:44 |
Kom och hälsa på varje dag
Publicerad på 2016-08-16 15:22:00 |
Ge mig lite prestige
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com