2017-10-11 331 views
0

我已经使用MySQL数据库创建了WEB API。 API现在按预期工作。我发送了仪表序列号和日期时间参数,然后获取预期结果。下面是我的控制器将多个参数传递给Web API GET方法

public MDCEntities medEntitites = new MDCEntities(); 
public HttpResponseMessage GetByMsn(string msn, DateTime dt) 
    {   
     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.Found, result); 
     } 
     catch (Exception ex) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex); 
     } 
    } 

下面是我的WebApiConfig文件

config.Routes.MapHttpRoute(
     name: "GetByMsn", 
     routeTemplate: "api/{controller}/{action}/{msn}/{dt}", 
     defaults: null, 
     constraints: new { msn = @"^[0-9]+$" , dt = @"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$" } 
     ); 

的网址是http://localhost:14909/api/meters/GetByMsn/002999000171/2017-10-10T10:08:20

我得到的回应是

[{ 
    "MSN": "002999000171", 
    "DateTime": "2017-10-10T10:04:39", 
    "Signal_Strength": "20" 
}, 
{ 
    "MSN": "002999000171", 
    "DateTime": "2017-10-10T10:06:35", 
    "Signal_Strength": "19" 
}, 
{ 
    "MSN": "002999000171", 
    "DateTime": "2017-10-10T10:08:31", 
    "Signal_Strength": "20" 
}, 
{ 
    "MSN": "002999000171", 
    "DateTime": "2017-10-10T10:10:27", 
    "Signal_Strength": "20" 
}, 
{ 
    "MSN": "002999000171", 
    "DateTime": "2017-10-10T10:12:23", 
    "Signal_Strength": "20" 
}] 

这一切场景的作品时,single serial number已通过。但在客户端,会有不止一个不同的序列号。为此,我必须让我的方法可以同时处理一个和多个序列号,前提是日期时间对所有人都是一样的。

One solution is to create a new method a pass the multiple serial number strings, but this will not help because the number of serial numbers are dynamic i.e. they may be one, two to 100's. So setting a hard coded method won't be a solution. 

我已经搜索过它,但大部分时间我一次又一次地找到静态方法。但是这个solution看起来有些有用,但我不知道它是否会起作用。

任何帮助将不胜感激。

回答

0

您可以将自定义模型传递给操作方法,但我建议您不要使用GET任务,因为GET没有正文。

取而代之,使用动词SEARCH并将正文模型中的连续编号和日期列表放在正文中。

public class MeterSearchModel 
{ 
    public List<string> Serials {get;set;} 
    public DateTime Date {get;set;} 
} 

在.NET中的Core 2控制器会碰到这样的 -

[AcceptVerbs("SEARCH")] 
public async Task<IActionResult> Search([FromBody] MeterSearchModel model) 
{ 
    //..perform search 
}