Azure functions 使用Azure函数有条件地输出到blob存储
我有一个返回状态代码的HTTP函数,但我还想将输出绑定到blob。但是当请求无效时,我根本不想创建输出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
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(“坏请求”);
}
}