0

我有一個Azure功能Blob存儲區輸入。我可以使用$inputFile變量訪問輸入文件,這非常容易。檢查輸入blob是否存在

爲了允許動態斑點選擇,我通過一個config查詢參數,其中包含要選擇的配置的名稱。

我唯一的問題是,如果有人經過一個不存在的Blob的名稱,Azure的功能立即返回一個500錯誤,這是不是特別用戶友好的 -

對象引用未設置爲對象的實例。

看起來這個錯誤是在我的腳本開始執行之前產生的,所以它可能不可能,但是有什麼方法可以改變這種行爲,以便我可以發送更有用的消息回到用戶。

下面是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 
} 

回答

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}" 
    }); 
} 
+0

感謝您的回覆。我將相應地編輯我的問題,因爲我錯誤地忽略了標記,但我使用PowerShell而不是C#,所以很遺憾,這不會幫助我:( –

1

根據你的描述,我檢查這個問題,使用PowserShell我的Http觸發,我可能會遇到相同的問題你提到的。我也檢查了它與Node.js,這個問題仍然存在。而對於C#,我們可以檢查inputBlob並編寫自定義進程。根據我的理解,如果blob不存在,綁定將失敗PowserShell,Node.js等,並且您無法捕獲異常並自定義您的響應。您可以添加您的問題here或添加您的反饋here

+0

如果沒有辦法解決這個問題,它將會非常令人失望。我在GitHub中打開了一個問題,如果MS提供任何反饋,我會更新我的問題。謝謝。 –