Servicestack自动查询不过滤结果

时间:2019-12-24 06:48:34

标签: servicestack ormlite-servicestack

我的查询 / API / Json / GetJson?Desc = test1

我得到所有记录,而不仅仅是test1记录

[Route("/API/Json/GetJson", "GET")]
public class GetJson : QueryDb<JsonModel>
{
    public int? Id { get; set; }
    public int? RefId { get; set; }
    public int? SecondRefId { get; set; }
    public int? ThirdRefId { get; set; }
    public int? FourthRefId { get; set; }
    public string Name { get; set; }
    public string JSON { get; set; }
    public string JsonType { get; set; }
    public string Desc { get; set; }
    public int? AuditId { get; set; }
}

public class JsonModel
{
    [AutoIncrement]
    [PrimaryKey]
    [IgnoreOnUpdate]
    public int Id { get; set; }
    /// <summary>
    /// Other tables the this data is relevant to
    /// </summary>
    public int? RefId { get; set; }
    public int? SecondRefId { get; set; }
    public int? ThirdRefId { get; set; }
    public int? FourthRefId { get; set; }

    /// <summary>
    /// name that is displayed to users
    /// </summary>
    [Required]
    public string Name { get; set; }

    public string JSON { get; set; }
    /// <summary>
    /// Tells what data type the JSON is storing
    /// </summary>
    [Required]
    public string JsonType { get; set; }

    public string Desc { get; set; }

    public int AuditId { get; set; }

    public DateTime AuditStamp { get; set; } = DateTime.UtcNow;
}

我的返回数据还包含其他字段。从跳过开始

{
    "id": 4,
    "refId": 9,
    "secondRefId": 3,
    "thirdRefId": 100,
    "fourthRefId": null,
    "name": "test",
    "json": "JSON STRING DATA",
    "jsonType": "test",
    "desc": "test3",
    "auditId": 0,
**"skip": null,
"take": null,
"orderBy": null,
"orderByDesc": null,
"include": null,
"fields": null,
"meta": null**
},

我将模型更新为可空值,直到重现所有记录为止。我的种子数据和我正在使用SS 5.6.0

WireUpService<IntegrationService>();

    using (var db = HostContext.Resolve<IDbConnectionFactory>().Open())
    {
        string JSON = " \"Columns\": [\r\n      {\r\n        \"CompanyName\": [\r\n          {\r\n            \"name\": \"Company Name\",\r\n            \"Visible\": \"True\",\r\n            \"Sort\": \"U,A,Z[Unsorted, A-Z, Z-A]\",\r\n            \"Filter\": \"Test Company\"\r\n          }\r\n        ],\r\n        \"ParentCompnay\": [\r\n          {\r\n            \"name\": \"Company Name\",\r\n            \"Visible\": \"True\",\r\n            \"Sort\": \"U,A,Z[Unsorted, A-Z, Z-A]\",\r\n            \"Filter\": \"Test Company\"\r\n          }\r\n        ]\r\n      }";
        db.DropAndCreateTable<JsonModel>();
        db.Insert(new JsonModel { Desc = "test",Name = "test",JsonType = "test", JSON = JSON,RefId = 10,SecondRefId = 3, AuditId = 0, AuditStamp = DateTime.Now });
        db.Insert(new JsonModel { Desc = "test1", Name = "test", JsonType = "test", JSON = JSON, RefId = 10, SecondRefId = 3, AuditId = 0, AuditStamp = DateTime.Now });
        db.Insert(new JsonModel { Desc = "test2", Name = "test", JsonType = "test", JSON = JSON, RefId = 5, SecondRefId = 3, AuditId = 0, AuditStamp = DateTime.Now });
        db.Insert(new JsonModel { Desc = "test3", Name = "test", JsonType = "test", JSON = JSON, RefId = 9, SecondRefId = 3,ThirdRefId = 100, AuditId = 0, AuditStamp = DateTime.Now });
    }

1 个答案:

答案 0 :(得分:1)

我无法使用提供的类来重现此问题,这些类已经植入了与查询匹配的测试数据不匹配的测试数据您已包含在JSON响应中:

db.CreateTable<JsonModel>();
db.Insert(new JsonModel { RefId = 1, SecondRefId = 1, ThirdRefId = 111, Name = "test1", Desc = "test1", JsonType = "test", JSON = "TEST1"});
db.Insert(new JsonModel { RefId = 9, SecondRefId = 3, ThirdRefId = 100, Name = "test1", Desc = "test3", JsonType = "test", JSON = "JSON STRING DATA"});

您的GetJson模型存在问题,其中您将IdAuditId指定为不可空的int属性,如果未指定,则将其填充到{ {1}}将DTO请求为GetJson(默认为int)。

如果您要在0自动查询服务中包括必需的值类型,则应始终为它们提供值,否则将其更改为GetJson,以便在以下情况下不将其添加到查询过滤器中没有指定它们,例如:

int?

完成此操作后,它可以按预期工作,在这里我可以使用您指定的查询来查询自动查询服务,即:

public class GetJson : QueryDb<JsonModel>
{
    public int? Id { get; set; }
    public int? AuditId { get; set; }
}

哪个可以按预期工作,并在var url = baseUrl.CombineWith("/API/Json/GetJson").AddQueryParam("Desc", "test1"); var json = url.GetJsonFromUrl(); json.Print(); DTO中返回匹配结果,即:

QueryResponse<T>