Functions.Templates/Templates/DurableFunctionsEntityHttp-CSharp-2.x/DurableFunctionsEntityHttpCSharp.cs (44 lines of code) (raw):
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Newtonsoft.Json.Linq;
namespace Company.Function
{
public static class DurableFunctionsEntityHttpCSharp
{
[FunctionName("DurableFunctionsEntityCSharp_CounterHttpStart")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, Route = "Counter/{entityKey}")] HttpRequestMessage req,
[DurableClient] IDurableEntityClient client,
string entityKey)
{
var entityId = new EntityId(nameof(Counter), entityKey);
if (req.Method == HttpMethod.Post)
{
await client.SignalEntityAsync(entityId, "add", 1);
return req.CreateResponse(HttpStatusCode.OK);
}
EntityStateResponse<JToken> stateResponse = await client.ReadEntityStateAsync<JToken>(entityId);
return req.CreateResponse(HttpStatusCode.OK, stateResponse.EntityState);
}
[FunctionName(nameof(Counter))]
public static void Counter([EntityTrigger] IDurableEntityContext context)
{
switch (context.OperationName.ToLowerInvariant())
{
case "add":
context.SetState(context.GetState<int>() + context.GetInput<int>());
break;
case "reset":
context.SetState(0);
break;
case "get":
context.Return(context.GetState<int>());
break;
}
}
}
}