Ich schreibe RESTful Dienst mit C#/wcf und müssen Filter auf GET setzen. Wie viele Datensätze zurückgegeben werden sollen, vielleicht wenn ich nach etwas filtern möchte, usw. Betrachten Sie diesen Code:
[WebGet(UriTemplate = "/devices/{DeviceId}/positions")]
public List<GPSPosition> GetDevicePositions(string deviceId)
{
//Lookup device:
using (var context = new MobileModelContext(ContextManager.AccountGKey.Value))
{
var d = context.Devices.Where(aa => aa.DeviceId == deviceId).FirstOrDefault();
if (d == null)
{
outgoingResponse.StatusCode = HttpStatusCode.NotFound;
outgoingResponse.StatusDescription = "Device not found";
return null;
}
var query = from p in context.Positions
where p.DeviceKey.Equals(d.DeviceKey)
select new GPSPosition
{
PositionGKey = p.PositionGKey,
Latitude = p.Latitude,
Longitude = p.Longitude,
Speed = p.Speed,
Accuracy = p.Accuracy,
Altitude = p.Altitude,
GPSTime = p.GPSTime,
DeviceTime = p.DeviceTime
};
return query.ToList();
}
}
[WebGet(UriTemplate = "/devices/{DeviceId}/positions?RecordCount={RecordCount}")]
public List<GPSPosition> GetDevicePositions2(string deviceId, int recordCount)
{
//Lookup device:
using (var context = new MobileModelContext(ContextManager.AccountGKey.Value))
{
var d = context.Devices.Where(aa => aa.DeviceId == deviceId).FirstOrDefault();
if (d == null)
{
outgoingResponse.StatusCode = HttpStatusCode.NotFound;
outgoingResponse.StatusDescription = "Device not found";
return null;
}
var query = from p in context.Positions
where p.DeviceKey.Equals(d.DeviceKey)
select new GPSPosition
{
PositionGKey = p.PositionGKey,
Latitude = p.Latitude,
Longitude = p.Longitude,
Speed = p.Speed,
Accuracy = p.Accuracy,
Altitude = p.Altitude,
GPSTime = p.GPSTime,
DeviceTime = p.DeviceTime
};
return query.Take(recordCount).ToList();
}
}
Viele Wiederholungen. Ich kann Code in andere Funktion verschieben, aber immer noch, ich habe 2 Vorlagen, ich habe 2 Funktionen. Gibt es eine Möglichkeit, 1 Vorlage für /Positionen/ zu machen, die alle möglichen "?" Szenarien abdecken wird?