首页 > 解决方案 > 如何在 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,以便可以调用它来获取不同的数据集?

标签: c#asp.netapi

解决方案


在两种情况下返回的数据(模式)的形状是否相同?如果是这样,更喜欢这样的东西:

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 个单独的控制器。


推荐阅读