BlobPath функции Azure в нижнем регистре - PullRequest
3 голосов
/ 20 марта 2019

У меня есть такая функция Azure

public async Task<IActionResult> GetProducts
(
  [HttpTrigger(AuthorizationLevel.Function, "get", Route = "products/{prod}/all")] HttpRequest req,
  [Blob("%prodPath%", FileAccess.Read, Connection = "AzureWebJobsStorage")] Stream myBlobRead,
   ILogger log, string prod)
 {
     var result = await _function.get(myBlobRead).ConfigureAwait(false);
     return result;
 }
)

BLOB-объект читает путь к файлу из файла конфигурации json.Внутри конфигурационного json-файла есть переменная и значение, подобное этому:

"prodPath": "products/{prod}-all.csv"

, если пользователь выполняет запрос get, подобный этому => www.xxx.com/api/products/table/all

все в порядке, потому что имя файла BLOB-файла называется table-all.csv

, но если пользователь пытается выполнить запрос get, подобный этому => www.xxx.com/api/products/Table/ all, произойдет сбой, потому что имя не совпадает.

Не могли бы вы помочь мне с этим?

Я попытался изменить переменную в файле конфигурации на

[tolower("prodPath")]: "products/{prod}-all.csv"

но такая же проблема.

Как сменить прод в нижний регистр?

Спасибо

1 Ответ

3 голосов
/ 21 марта 2019

Я могу предложить использовать метод связывания во время выполнения ( статья для c # и c # script ). Идея состоит в том, что вместо использования атрибута блога вы используете параметр IBinder, а затем вызываете эту привязку в теле функции. Очевидно, теперь вы можете оценить любой параметр, который вы хотите. Обратите внимание, что вы должны удалить выражение из файла json, если вы используете эту технику.

Вот пример из MSDN в сочетании с битом вашего кода:

public static class IBinderExample
{
    [FunctionName("CreateBlobUsingBinder")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "products/{prod}/all")] HttpRequest req,
        IBinder binder)
    {
        var prodPath = $"products/{prod}-all.csv".ToLower();
        // provide connection string and optionally change TextWriter to whatever you need
        using (var writer = binder.Bind<TextWriter>(new BlobAttribute(
                   prodPath, FileAccess.Write)))
        {
            writer.Write("Hello World!");
        };
    }
}
...