C #: Utilisation d'Odata avec une entrée de tableau dans l'API

Oct 08 2020

Comment faire fonctionner Odata avec une variable de liste? L'API suivante ne fonctionne pas et génère une erreur.

HttpGet

Erreur: {"type": "https://tools.ietf.org/html/rfc7231#section-6.5.13", "title": "Type de support non pris en charge", "status": 415, "traceId": " 00-b0b48a41f445ac4bbcebba902f8cca95-a714db4f4fd0c146-00 "}

Toutes mes autres API fonctionnent,

"http: // localhost: 4547 / api / properties / GetIdentifierPaged"

Manette:

[HttpGet[("[Action]")] 
public ActionResult GetIdentifierPaged(List<string> propertyListRequest, ODataQueryOptions<PropertyDto> queryOptions)
{
    propertyListRequest.Add("1110200100"); // fake data
    var model =  _propertyService.GetByPropertyIdentifierPaged(propertyListRequest).ToODataPageResult(queryOptions);
    return Ok(model);
}

Un service:

public IQueryable<PropertyDto> GetByPropertyIdentifierPaged(List<string> identifiers)
{
    var identifiersEnumerable = identifiers.AsEnumerable();
    var properties = _dataContext.Property
        .Include(x => x.PropertyStatus)
         Where(x => identifiersEnumerable.Contains(x.PropertyIdentifier))
    return properties;
}

Résultat de la page:

public static PageResult<T> ToODataPageResult<T>(this IQueryable<T> query, ODataQueryOptions<T> queryOptions)
{
    var settings = new ODataQuerySettings();
    settings.EnsureStableOrdering = false;
    var countQuery = (IQueryable<T>)queryOptions.ApplyTo(query, settings, AllowedQueryOptions.Skip | AllowedQueryOptions.Top | AllowedQueryOptions.Select | AllowedQueryOptions.OrderBy);
    long count = countQuery.Count();
    var results = (IQueryable<T>)queryOptions.ApplyTo(query, settings, AllowedQueryOptions.None);

    return new PageResult<T>(results, null, count);
}

Réponses

go.. Oct 08 2020 at 12:11

Ce problème indique qu'il y a un problème avec votre demande, mais même si vous êtes venu pour répondre, vous recevrez des erreurs. Vous ne pouvez pas donner une valeur que la session est ouverte en réponse

return new PageResult<T>(**results.ToList()**, null, count);