如何在API

时间:2018-11-13 21:56:46

标签: c# asp.net 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,以便可以调用它来获取不同的数据集?

2 个答案:

答案 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)})