我正在构建一个API以从存储过程读取数据。我必须使用相同的方法通过在URL中传递不同的参数来读取不同的数据集。
下面是路径的外观:
localhost:8080/api/PowerFeed/GetData/date/{date}/ClassID/{ClassID}
localhost:8080/api/PowerFeed/GetData/date/{date}/MainID/{MainID}
如何在我的方法中使用单个参数访问不同的ID。
方法:
public IHttpActionResult GetData(DateTime date, int ClassID)
{
if(date == null)
{
Logger.Debug(
CommonConstants.Failed,
$"{nameof(PowerFeedController)}.nameof(GetData)}",
CorrelationId);
return BadRequest("Invalid request parameters. Cannot get data without
date");
}
var stopwatch = Stopwatch.StartNew();
IEnumerable<Power> records = null;
if(ClassID >= 0)
{
records = _dataAccessor.GetData(ApplicationName, date, ClassID);
Logger.Debug(stopwatch.ElapsedMilliseconds.ToString(),
$"{Operation.MeasureExecutionTimeInMilliseconds}-{nameof(PowerFeedDataAccessor)}.{nameof(_dataAccessor.GetData)}",
CorrelationId)
}
else
{
Logger.Debug(
CommonConstants.Failed,
$"{nameof(PowerFeedController)}.{nameof(GetData)}",
CorrelationId);
return BadRequest("Invalid request parameters. Cannot get data without ClassID");
}
return Ok(records);
}
在上述方法中,如何传递MainID而不是ClassID,以便可以调用它来获取不同的数据集?
答案 0 :(得分:1)
两个实例中返回的数据的形状(架构)是否相同?如果是这样,则更喜欢这样:
localhost:8080/api/PowerFeed/GetData/date/{date}&classID={ClassID}&mainID=MainID
,然后在控制器中:
public IHttpActionResult GetData(DateTime date, int classID, int mainID)
{
if(date == null)
throw new NullReferenceException(); //etc
if(classID == 0 && mainID == 0)
throw new NullReferenceException(); //etc
// do method for each case (ClassID or MainID) here
}
如果形状/架构因查询而异,那么您应该有2个单独的控制器。
答案 1 :(得分:0)
您可以尝试如下所示的PUT:
log = logging.LoggerAdapter(logging.getLogger("app"), {"user" : None, "age": 20})
def landing(request):
log.info('Message me', extra={"user": str(request.user)})