2017-10-11 4 views
0

Ich habe eine WEB API mit MySQL Datenbank erstellt. Die API funktioniert wie erwartet. Ich habe eine Zählerseriennummer und einen Datumzeitparameter gesendet und dann das erwartete Ergebnis erhalten. Im Folgenden mein Controller istMehrere Parameter an die Web-API übergeben GET-Methode

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); 
     } 
    } 

unten meine ist WebApiConfig Datei

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}$" } 
     ); 

Die URL ist http://localhost:14909/api/meters/GetByMsn/002999000171/2017-10-10T10:08:20

Die Antwort, die ich GET

[{ 
    "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" 
}] 

alle Szenario, wenn ein single serial number funktioniert Dies ist ist bestanden. Aber auf der Clientseite würde es mehr als eine unterschiedliche Seriennummer geben. Dafür musste ich meine Methode so einrichten, dass sie sowohl für eine als auch für mehrere Seriennummern funktioniert, vorausgesetzt, dass das Datum für alle gleich ist.

Ich habe danach gesucht, aber meistens habe ich die statische Methode immer wieder gefunden. Aber das solution sieht etwas hilfreich aus, aber ich weiß nicht, ob es funktioniert oder nicht.

Jede Hilfe würde sehr geschätzt werden.

Antwort

0

Sie können ein benutzerdefiniertes Modell an eine Aktionsmethode übergeben, aber ich schlage vor, die GET für Sie Aufgabe nicht zu verwenden, da GET keinen Rumpf hat.

Verwenden Sie stattdessen das SEARCH Verb und legen Sie die Liste der Seriennummern und das Datum in einem benutzerdefinierten Modell im Körper.

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

In .NET Core 2 des Controllers so etwas wie haben würde -

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