C #: Menggunakan Odata dengan Input Array di API

Oct 08 2020

Bagaimana cara membuat Odata bekerja dengan variabel Daftar? API berikut tidak berfungsi dan memberikan kesalahan.

HttpGet

Kesalahan: {"type": "https://tools.ietf.org/html/rfc7231#section-6.5.13", "title": "Jenis Media Tidak Didukung", "status": 415, "traceId": " 00-b0b48a41f445ac4bbcebba902f8cca95-a714db4f4fd0c146-00 "}

Semua API saya yang lain berfungsi,

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

Pengontrol:

[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);
}

Layanan:

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;
}

Hasil Halaman:

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);
}

Jawaban

go.. Oct 08 2020 at 12:11

Masalah ini menunjukkan bahwa ada masalah dengan permintaan Anda, tetapi meskipun Anda datang untuk menanggapinya, ada kesalahan yang akan Anda terima. Anda tidak dapat memberikan nilai bahwa sesi terbuka sebagai tanggapan

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