Saat saya menambahkan tipe ke AutoQuery, dengan:

[Route("/templates")]
public class SearchTemplates : QueryDb<Template>
{
    public int? Id { get; set; }
    public string Name { get; set; }
}

Maka saya dapat menanyakan objek ini dengan Id atau Nama (atau atribut lain apa pun yang akan saya tambahkan, yang dimiliki oleh POCO Template). Namun selalu mengembalikan daftar item.

Sangat berguna untuk bisa MENDAPATKAN satu item (bukan hasil pencarian).

Inilah cara saya melakukannya:

[Route("/template/{Id}","GET")]
public class SingleTemplate : IReturn<Template>
{
    public int Id { get; set; }
}

public Template Get(SingleTemplate request)
{
    return Db.LoadSingleById<Template>(request.Id); 
}

Dengan semua AutoQuery dan AutoCRUD baru, menurut saya "kembalikan satu item dengan URL-nya" juga bisa otomatis?

2
specimen 12 Mei 2021, 15:43

1 menjawab

Jawaban Terbaik

Tidak, Semua layanan AutoQuery QueryDb<T> mengembalikan DTO Respons QueryResponse sesuai dengan Kontrak Layanan, yaitu:

public abstract class QueryDb<T> 
    : QueryBase, IQueryDb<T>, IReturn<QueryResponse<T>> { }

public abstract class QueryDb<From, Into> 
    : QueryBase, IQueryDb<From, Into>, IReturn<QueryResponse<Into>> { }

public class QueryResponse<T> : IQueryResponse
{
    public virtual int Offset { get; set; }
    public virtual int Total { get; set; }
    public virtual List<T> Results { get; set; }
    public virtual Dictionary<string, string> Meta { get; set; }
    public virtual ResponseStatus ResponseStatus { get; set; }
}

Satu hasil masih akan mengisi properti Results, sehingga format kabel JSON akan terlihat seperti:

{ "results":[ {/*Template*/} ] }

Anda dapat membuat Implementasi AutoQuery Khusus Anda sendiri yang menggunakan IAutoQueryDb API untuk mengembalikan DTO kustom Anda sendiri, tetapi kemudian DTO Permintaan Anda TIDAK harus mewarisi dari QueryDb<T> karena tidak mengembalikan QueryResponse<T> akan melanggar kontrak Layanan eksplisit dari DTO Permintaan (dan semua klien mengharapkannya), yaitu Anda hanya akan membuat ServiceStack Service normal yang mengembalikan Jenis Respons kustom Anda sendiri.

1
mythz 12 Mei 2021, 12:59