检查输入blob是否存在

时间:2017-10-17 09:23:53

标签: powershell azure binding azure-storage-blobs azure-functions

我有一个 Azure功能,带有 Blob商店输入。我可以使用$inputFile变量访问输入文件,这非常简单。

为了允许动态blob选择,我传递一个config查询参数,其中包含要选择的配置名称。

我唯一的问题是,如果有人传递了一个不存在的blob的名称, Azure功能会立即返回500错误,这对用户不是特别友好 -

  

对象引用未设置为对象的实例。

看起来这个错误是在我的脚本执行开始之前生成的,所以可能无法实现,但有没有办法改变这种行为,以便我可以向用户发送更有用的消息。 / p>

以下是来自 function.json 的绑定,以防万一 -

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "authLevel": "function",
      "methods": [
        "get"
      ]
    },
    {
      "type": "blob",
      "name": "inputBlob",
      "path": "configs/{config}.json",
      "connection": "AzureWebJobsDashboard",
      "direction": "in"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

2 个答案:

答案 0 :(得分:1)

工作示例。

function.json:

{
  "bindings": [
    {
      "name": "info",
      "type": "httpTrigger",
      "direction": "in",
      "authLevel": "function"
    },
    {
      "name": "inputBlob",
      "type": "blob",
      "direction": "in",
      "path": "configs/{config}.json",
      "connection": "AzureWebJobsStorage"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ]
}

run.csx:

using System.Net;

public class BlobInfo
{
    public string config { get; set; }
}

public static HttpResponseMessage Run(HttpRequestMessage req, BlobInfo info, string inputBlob)
{
    if (inputBlob == null) {
        return req.CreateResponse(HttpStatusCode.NotFound);
    } 

    return req.CreateResponse(HttpStatusCode.OK, new {
        data = $"{inputBlob}"
    });
}

答案 1 :(得分:1)

根据您的描述,我使用PowserShell使用Http Trigger检查了这个问题,我可能会遇到与您提到的相同的问题。我也用Node.js检查了它,这个问题仍然存在。对于C#,我们可以检查inputBlob并编写自定义进程。根据我的理解,如果blob不存在,PowserShell,Node.js等的绑定将失败,您现在无法捕获异常并自定义响应。您可以添加问题here或添加反馈here