In this post, let's see have how we can invoke a HTTP Orchestration
Trigger in an Azure Durable Functions with multipart/form-data. There can be scenarios where you want to pass multipart/form-data (mostly files) to HTTP Orchestration Trigger.
Note I am using Azure Functions Isolated model.
If you scaffold a a Durable Function in Visual Studio, you will see it's HTTP
Trigger function to be something like below.
[Function("Function_HttpStart")]
public static async Task<HttpResponseData> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
[DurableClient] DurableTaskClient client,
FunctionContext executionContext)
{
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(nameof(Function));
// Omitted for brevity.
return await client.CreateCheckStatusResponseAsync(req, instanceId);
}
Notice that it uses HttpRequestData for request and for HttpResponseData. which is available via,
Microsoft.Azure.Functions.Worker.Extensions.Http
Azure Functions ASP.NET Core integration is available via following NuGet
package.
Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore
And then in the Program.cs,
FunctionsApplicationBuilder builder = FunctionsApplication.CreateBuilder(args);
// Enable ASP.NET Core features in Azure Functions
builder.ConfigureFunctionsWebApplication();// Omitted for brevity
And now we can change the HTTP trigger as follows.
[Function("Function_HttpStart")]
public static async Task<IActionResult> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
[DurableClient] DurableTaskClient client,
FunctionContext executionContext)
{
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(nameof(Function));
if (req.HasFormContentType)
{
IFormCollection formCollection = await req.ReadFormAsync();
// TODO: Process form data as needed.
}
// Omitted for brevity.
HttpManagementPayload httpManagementPayload = client.CreateHttpManagementPayload(instanceId);
return new ObjectResult(httpManagementPayload)
{
StatusCode = (int)HttpStatusCode.Accepted
};
}
By the way, if you want to use multipart/form-data in any of the Azure Functions HTTP Triggers, Azure Functions ASP.NET
Core integration is the way.
Hope this helps.
Happy Coding.
Regards,
Jaliya
No comments:
Post a Comment