Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 27609|Odpowiedź: 3

[WebAPI] WebAPI nie potrafi wiązać wielu parametrów (SB i SB1) z treścią żądania

[Skopiuj link]
Opublikowano 16.08.2016 13:52:38 | | | |



W WebAPI ciało żądania (HttpContent) można odczytać tylko raz, nie jest bufor i można go tylko odczytać dalej.

Na przykład:

1. Adres żądania: /?id=123&name=bob

    Metoda po stronie serwera: void Akcja (int id, nazwa ciągu znaków) // Wszystkie parametry są prostymi typami, więc wszystkie pochodzą z adresu URL

2. Adres żądania: /?id=123&name=bob

    Metoda po stronie serwera: void Action([FromUri] int id, [FromUri] nazwa ciągu) // Tak samo jak powyżej

                      void Action([FromBody] nazwa ciągu ciągu); Atrybut [FormBody] pokazuje, że cała twór jest odczytywany jako ciąg jako argument

3. Adres żądania: /?id=123

    Definicja klasy:

klasa publiczna Customer { // Złożony typ obiektu zdefiniowany
  ciąg publiczny Nazwa { get; set; }
  public int Age { get; set; }
}

    Metoda po stronie serwera: void Action(int id, Customer c) // Id parametru odczytuje się ze ciągu zapytania, parametr c to złożona klasa obiektu klienta, odczytywana z ciała przez formatter

    Metoda po stronie serwera: akcja anulowania (Klient c1, Klient c2) // Błąd! Wiele parametrów to typy złożone i wszystkie próbują odczytać z ciała, które można odczytać tylko raz

    Metoda po stronie serwera: akcja anulowania ([FromUri] Customer c1, Customer c2) // Tak! W przeciwieństwie do powyższej akcji, zespolony typ C1 będzie odczytywany z URL, a C2 z jego ciała

4. Metoda ModelBinder:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Wskazuje, że do rozwiązania parametru użyto konkretnego bindera modelu

[ModelBinder(MyCustomBinder)] klasa publiczna SomeType { } // Zastosuj tę regułę do wszystkich parametrów typu SomeType, deklarując atrybut [ModelBidner(MyCustomBinder)] do konkretnego typu SomeType

void Action(SomeType c) // Ponieważ typ c to SomeType, cechy SomeType są stosowane, aby określić jego wiązanie modelu



Streszczenie:

1. Domyślne proste parametry są przekazywane przez parametry URL, z wyjątkami:

1.1 Jeśli trasa zawiera parametr id, parametr id jest przekazywany przez trasę;

1.2 Jeśli parametr jest oznaczony jako [FromBody], parametr może być prostym parametrem, a klient może przekazać go przez POST: $.ajax(url, '=value') lub $.ajax({url: url, data: {''value'}});

2. Domyślne parametry złożone (niestandardowe klasy podmiotów) są przekazywane za pomocą POST, z wyjątkami:

2.1 Jeśli wartość parametru jest oznaczona jako [FromUri], parametr może być parametrem zespolonym;

3. Parametr oznaczony [FromBody] może pojawić się tylko raz, parametr oznaczony jako [FromUri] może pojawiać się wielokrotnie, a jeśli parametr oznaczony jako [FromUri] jest prostym parametrem, można go usunąć.




Poprzedni:.NET Oracle multi-table query method, głupia metoda.
Następny:C# wykorzystuje odbicie do określenia, czy przypisana jest właściwość
Opublikowano 16.08.2016 15:21:29 |
ModelBinder powinien mieć klasę cech dla ModelBinderAttribute

Podobnie jak filtry
Opublikowano 16.08.2016 15:21:44 |
Przyjeżdżaj codziennie
Opublikowano 16.08.2016 15:22:00 |
Daj mi trochę prestiżu
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com