Odebranie tablicy liczb z żądania HTTP

0

taki kod działa poprawnie, binduje poprawnie

[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

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ć

0

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

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

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ą

1 użytkowników online, w tym zalogowanych: 0, gości: 1