Azure functions 使用Azure函数有条件地输出到blob存储

Azure functions 使用Azure函数有条件地输出到blob存储,azure-functions,Azure Functions,我有一个返回状态代码的HTTP函数,但我还想将输出绑定到blob。但是当请求无效时,我根本不想创建输出blob。我试过这样的方法: public async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "{userName}/messages")] HttpRequest req, string userName, [Blob("user

我有一个返回状态代码的HTTP函数,但我还想将输出绑定到blob。但是当请求无效时,我根本不想创建输出blob。我试过这样的方法:

public async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "{userName}/messages")] HttpRequest req,
    string userName,
    [Blob("users/{userName}/{DateTime}.json", FileAccess.Write)] Stream outputStream)
{
    if (IsValid(req.Body))
    {
        await req.Body.CopyToAsync(outputStream);
        return new AcceptedResult();
    }
    else
    {
        return new BadRequestResult();
    }
}
公共异步任务运行(
[HttpTrigger(AuthorizationLevel.Anonymous,“post”,Route=“{userName}/messages”)]HttpRequest请求,
字符串用户名,
[Blob(“users/{userName}/{DateTime}.json”,FileAccess.Write)]Stream outputStream)
{
if(IsValid(请求正文))
{
等待请求正文CopyToAsync(outputStream);
返回新的AcceptedResult();
}
其他的
{
返回新的BadRequestResult();
}
}
但是,不幸的是,即使返回
BadRequest
,输出blob也总是被创建的。(创建的文件为空,但我根本不希望创建它。)

在返回
BadRequest
之前,我还尝试设置
outputStream=null
,但没有帮助


有没有办法创建blob文件?

在blob函数中,当容器中不存在
{DateTime}.json
时,它将自动创建blob。因此,如果要将输出blob路径设置为
users/{userName}/{DateTime}.json
,系统将自动为您生成一个新的DateTime.json文件,以便始终创建输出blob

因此,您可以使用以下代码来有条件地创建blob文件

public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function,  "post", Route = "{userName}/messages")] HttpRequest req, 
    string userName,
    [Blob("users/{userName}", Connection = "StorageConnectionString")] CloudBlobContainer outputContainer)
    {
        if (IsValid(req.Body))
        {
            await outputContainer.CreateIfNotExistsAsync();
            var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            var blobName = DateTime.Now.ToString() + ".json";
            var cloudBlockBlob = outputContainer.GetBlockBlobReference(blobName);
            await cloudBlockBlob.UploadTextAsync(requestBody);
            return new AcceptedResult();
        }else{
            return new BadRequestObjectResult("bad request");
        }
    }
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“post”,Route=“{userName}/messages”)]HttpRequest请求,
字符串用户名,
[Blob(“users/{userName}”,Connection=“StorageConnectionString”)]CloudBlobContainer outputContainer)
{
if(IsValid(请求正文))
{
等待outputContainer.CreateIfNotExistsAsync();
var requestBody=等待新的StreamReader(req.Body).ReadToEndAsync();
var blobName=DateTime.Now.ToString()+“.json”;
var cloudBlockBlob=outputContainer.getBlockBlockBlobReference(blobName);
等待cloudBlockBlob.UploadTextAsync(requestBody);
返回新的AcceptedResult();
}否则{
返回新的BadRequestObjectResult(“坏请求”);
}
}