关于端点

时间:2017-07-07 00:21:07

标签: c# api azure azure-functions

如果对于以下情况还有其他方法,需要建议。

  1. 我们在Azure功能上有现有的API端点( xyz ),它使用其他Web API( abc def )。许多消费者使用 xyz 端点。
  2. 我们有一个消费高于 xyz API的解决方案来生成报告。
  3. 使用上述解决方案的报告的客户需要一个对他们非常重要的属性( propme )。
  4. xyz 可以修改为使用 abc 中的一个附加属性 propme
  5. 执行上述操作会更改 xyz 响应,这对于使用它的其他消费者来说是不需要的。
  6. 我们上面提到的想法是让我们的解决方案消耗 xyz 以及 abc 。这将为我们提供我们想要的输出,但是增加了API调用的数量。因此,增加生成报告的时间。

    我们是否可以使用make one API调用来获取上述内容。

1 个答案:

答案 0 :(得分:0)

正如Mikhail在评论中提到的,您可以在请求标头中包含一个标志,指示响应是否需要包含其他属性 propme 。您可以从功能代码中的请求标头中提取标志值,并动态创建并返回响应。以下示例代码供您参考。

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    name = name ?? data?.name;

    IEnumerable<string> headerValues;

    var response = new HttpResponseMessage();

    if(req.Headers.TryGetValues("requiredpropme",out headerValues)){

       if(headerValues.FirstOrDefault()=="1"){
          response = req.CreateResponse(HttpStatusCode.OK, "the request contains requiredpropme in request header");
       }
       else{
          response = req.CreateResponse(HttpStatusCode.OK, "the request does not contain requiredpropme in request header");
       } 
    }

    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : response;
}

如果传递requiredpropme不同的值,它将返回不同的响应。 enter image description here