Перевод пути к большому двоичному объекту функции Azure в нижний регистр

#c# #azure #azure-functions

#c# #azure #azure-функции

Вопрос:

У меня есть функция 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 resu<
 }
)
  

Большой двоичный объект считывает путь к файлу из файла config json.
Внутри файла config 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"
  

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

Как изменить prod на нижний регистр?

Спасибо

Комментарии:

1. Что, если мы зададим маршрут в нижнем регистре? Route = "products/{prod}/all".ToLower()

2. @PrasadTelkikar я получил эту ошибку при попытке выполнить, как вы упомянули => Описание кода серьезности Ошибка состояния подавления строки файла проекта CS0182 Аргумент атрибута должен быть постоянным выражением, выражением typeof или выражением создания массива типа параметра атрибута API HttpTrigger.cs 51 Активный

Ответ №1:

Я могу предложить использовать технику привязки во время выполнения (статья для c # и c # script). Идея заключается в том, что вместо использования атрибута blog вы используете 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!");
        };
    }
}