我正在用C#/ wcf編寫RESTful服務,並且需要在GET上放置過濾器。例如,有多少條記錄返回,也許如果我想通過一些過濾等考慮以下代碼:如何使此代碼幹?
[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();
}
}
大量的重複。我可以將代碼移到其他函數中,但仍然有2個模板,我有2個函數。有沒有辦法爲/ position /製作1個模板,以涵蓋所有可能的「?」場景?
#1:不知道這將如何工作,因爲我需要指定我正在尋找哪一列,是否正確? #2:不起作用。 GPSPosition是專門爲REST + JSON創建的POCO類。如果我使用實體生成的類,那麼當它是JSON時它看起來非常糟糕。這就是爲什麼我把它放在第一位。 #3我可以使用可選參數與WCF模板?! – katit 2011-06-05 21:01:20
#1:查找(..)按鍵列(我假設DeviceId是一個關鍵列)進行搜索,#2與POCO類完美配合,可以根據需要應用映射 – 2011-06-05 21:11:47
不,deviceId不是關鍵列。它是唯一的索引,但主鍵是IDENTITY,所以它不能像這樣工作。 #2。這真的很貴嗎?事實上 - 最多隻有少數記錄。 – katit 2011-06-05 21:15:07