Odebranie tablicy liczb z żądania HTTP

Odebranie tablicy liczb z żądania HTTP
JD
  • Rejestracja: dni
  • Ostatnio: dni
0

taki kod działa poprawnie, binduje poprawnie

Kopiuj
[HttpGet("get")]
public ActionResult<IEnumerable<Customer>> customers([FromQuery(Name = "id[]")] IEnumerable<int> id)
{
    //taki leci get z frontu http://api/customer/get?id[]=388&id[]=211&id[]=189&id[]=252&id[]=359&id[]=153&id[]=270
}

natomiast

Kopiuj
public ActionResult<IEnumerable<Order>> GetAll([FromQuery] SalesRepresentativeDateRangeRequest request) {}
    public class SalesRepresentativeDateRangeRequest
    {
        public IEnumerable<int> SalesRepresentativeId { get; set; }
        public DateTime Start { get; set; }
        public DateTime End { get; set; }

    }
// taki leci get z frontu http://api/order/all?SalesRepresentativeId[]=388&SalesRepresentativeId[]=211&SalesRepresentativeId[]=189&SalesRepresentativeId[]=252&SalesRepresentativeId[]=359&SalesRepresentativeId[]=153&SalesRepresentativeId[]=270&Start=2023-03-01&End=2023-03-31    

SalesRepresentativeId w ogóle nie jest zbindowany
jak poprawnie zbindować

AdamWox
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Jastrzębie-Zdrój
  • Postów: 2180
0

A nie lepiej zrobić to jako HttpPost i w body przekazać cały obiekt? Za chwilę przekroczysz limit url ✌️

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1596
0

Według dokumentacji powinno się podawać parametr tablicowy w inny sposób
https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-6.0

W twoim przypadku bez []
SalesRepresentativeId=359&SalesRepresentativeId=153&SalesRepresentativeId

btw. Pierwszy przykład działa bo podałeś nazwe from query id[] i takie coś id[] znalazł w urlu

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
0

Z zasady deserializery w Javie / C# nie lubią się z tablicami, a głównym powodem jest brak bezargumentowego konstruktora (a dobre zostawiają w logach wiadomość w tej sprawie, w tym dla symetrii odmawiają w serializerze też)
Wprawdzie rozmiar tablicy to "trochę inny" argument konstruktora niz dla zwykłego obiektu, ale fakt jest faktem.

List - dlatego że da się skonstruować bezargumentowo, w praktyce na nieznaną długość, a taka sytuacja jest przed deserializacją

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.