更改WEB API的响应类型

时间:2017-10-12 09:01:48

标签: json linq rest web-services asp.net-web-api2

我使用MySQL DB创建了一个WEB API。 API运行良好。代码在

之下
try
        {
            var before = dt.AddMinutes(-5);
            var after = dt.AddMinutes(5);

            var result = medEntitites.tj_xhqd
                         .Where(m =>
                         m.zdjh == msn &&
                         m.sjsj >= before &&
                         m.sjsj <= after).Select(m => new { MSN = m.zdjh, DateTime = m.sjsj, Signal_Strength = m.xhqd }).Distinct();


            return Request.CreateResponse(HttpStatusCode.OK, new { data = result });
        }
        catch (Exception ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
        }

,响应低于

{
"data": [
    {
        "MSN": "002999000076",
        "DateTime": "2017-10-11T10:16:48",
        "Signal_Strength": "15"
    },
    {
        "MSN": "002999000076",
        "DateTime": "2017-10-11T10:19:02",
        "Signal_Strength": "15"
    },
    {
        "MSN": "002999000076",
        "DateTime": "2017-10-11T10:20:58",
        "Signal_Strength": "16"
    },
    {
        "MSN": "002999000076",
        "DateTime": "2017-10-11T10:22:54",
        "Signal_Strength": "15"
    }
]}

它是如何工作的?

我正在传递一个仪表序列号和一个日期时间。 API接收它们。 + - 时间分钟并显示该时间的所有记录。

现在我想要的是,如果在某个特定时间存在任何记录,那么API将发送给我YES作为回应,如果没有找到记录,那么它将发送给我NO

样本回复应为

{
    "data": [
        {
         "Response":   "YES"/"NO"
        }
    ]
}  

我搜索过它的解决方案但无法找到一个

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

创建以下类

public class ResponseChecker
{
    public string Response{get; set;};

    public ResponseChecker(IEnumerable result)
    {
        if(result.ToList().Count > 0)
            Response = "YES";
        else
            Response = "NO";
    }
}

修改您的代码,如下所示

try
{
    var before = dt.AddMinutes(-5);
    var after = dt.AddMinutes(5);

    var result = medEntitites.tj_xhqd
                 .Where(m =>
                 m.zdjh == msn &&
                 m.sjsj >= before &&
                 m.sjsj <= after).Select(m => new { MSN = m.zdjh, DateTime = m.sjsj, Signal_Strength = m.xhqd }).Distinct();


    return Request.CreateResponse(HttpStatusCode.OK, new { data = new ResponseChecker(result) });
}
catch (Exception ex)
{
    return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}

答案 1 :(得分:0)

这样的事情应该有效:

var before = dt.AddMinutes(-5);
var after = dt.AddMinutes(5);

bool anyRecords = medEntitites.tj_xhqd.Any(m =>
     m.zdjh == msn &&
     m.sjsj >= before &&
     m.sjsj <= after);

return Request.CreateResponse(HttpStatusCode.OK, new 
{ 
    data = new[]
    {
        new { Response = anyRecords ? "YES" : "NO" }
    }
});

对我来说反应似乎有些过分。为什么只需要返回单个标志的单元素对象数组?