c# - 如何在 API 中为不同的值传递相同的参数
问题描述
我正在构建一个 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,以便可以调用它来获取不同的数据集?
解决方案
在两种情况下返回的数据(模式)的形状是否相同?如果是这样,更喜欢这样的东西:
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 个单独的控制器。
推荐阅读
- javascript - 在返回之前从反应钩子中获取更新的变量
- java - 从 Firebase 数据库检索数据时出错
- c# - C# - 在子文件夹中运行 BAT 的动态路径
- c# - 如何将 X509Certificate 的 PublicKey 转换为 Base64 字符串并返回?
- android - 在发布应用程序 google play 中更改 SHA-1 .. 与 firebase 集成
- python-3.x - 谁能解释我这段代码中的打印语句?
- java - 如何检查 Google 位置准确性是否设置为提高?
- java - 使用 Springboot 上传带有附加数据的大文件 [HttpServlet]
- python - 如何在栅格图层 Python 上绘制空间点?
- javascript - 如何在 URL 末尾添加 id="text1" 的值?