可以自动查询 return 单个项目(不是列表)
Can AutoQuery return a single item (not list)
当我向 AutoQuery 添加类型时,使用:
[Route("/templates")]
public class SearchTemplates : QueryDb<Template>
{
public int? Id { get; set; }
public string Name { get; set; }
}
然后我可以通过 ID 或名称(或我要添加的 POCO 模板具有的任何其他属性)查询此对象。但是它总是 return 的项目列表。
能够获取单个项目(不是搜索结果)非常有用。
我是这样做的:
[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);
}
有了所有新的 AutoQuery 和 AutoCRUD,在我看来,“return 单个项目 URL” 也可以是自动的?
否,所有 AutoQuery QueryDb<T>
services return the same fixed QueryResponse Response DTO as per its Service Contract,即:
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; }
}
单个结果仍会填充 Results
属性,因此 JSON 线格式如下:
{ "results":[ {/*Template*/} ] }
您可以创建自己的 Custom AutoQuery Implementation,它利用 AutoQuery 的 IAutoQueryDb
API 到 return 您自己的自定义填充 DTO,但您的请求 DTO 应该 NOT 从 QueryDb<T>
继承,因为 not returning a QueryResponse<T>
会破坏 Request DTO(以及所有期望它的客户)的显式服务合同,即您将改为创建一个普通的 ServiceStack 服务 return 使用您自己的自定义响应类型。
当我向 AutoQuery 添加类型时,使用:
[Route("/templates")]
public class SearchTemplates : QueryDb<Template>
{
public int? Id { get; set; }
public string Name { get; set; }
}
然后我可以通过 ID 或名称(或我要添加的 POCO 模板具有的任何其他属性)查询此对象。但是它总是 return 的项目列表。
能够获取单个项目(不是搜索结果)非常有用。
我是这样做的:
[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);
}
有了所有新的 AutoQuery 和 AutoCRUD,在我看来,“return 单个项目 URL” 也可以是自动的?
否,所有 AutoQuery QueryDb<T>
services return the same fixed QueryResponse Response DTO as per its Service Contract,即:
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; }
}
单个结果仍会填充 Results
属性,因此 JSON 线格式如下:
{ "results":[ {/*Template*/} ] }
您可以创建自己的 Custom AutoQuery Implementation,它利用 AutoQuery 的 IAutoQueryDb
API 到 return 您自己的自定义填充 DTO,但您的请求 DTO 应该 NOT 从 QueryDb<T>
继承,因为 not returning a QueryResponse<T>
会破坏 Request DTO(以及所有期望它的客户)的显式服务合同,即您将改为创建一个普通的 ServiceStack 服务 return 使用您自己的自定义响应类型。