Elastiflix/dotnet-login-elastic-manual/Controllers/LoginController.cs (67 lines of code) (raw):
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Serilog;
using Elastic.Apm;
namespace login.Controllers
{
[ApiController]
[Route("[controller]")]
public class LoginController : ControllerBase
{
private static readonly List<string> UserNames = new List<string>
{
"Alice",
"Bob",
"Charlie",
"Dave",
"Eva"
};
// Responds to GET requests.
[HttpGet]
public ActionResult Get()
{
var transaction = Elastic.Apm.Agent.Tracer.StartTransaction("MyTransaction","Request");
try
{
var user = GenerateRandomUserResponse();
Log.Information("User logged in: {UserName}", user);
return user;
}
catch (Exception e)
{
transaction.CaptureException(e);
throw;
}
finally
{
transaction.End();
}
}
// Responds to POST requests.
[HttpPost]
public ActionResult Post([FromBody] dynamic body)
{
var transaction = Elastic.Apm.Agent.Tracer.StartTransaction("MyTransaction", "Request");
try
{
var user = GenerateRandomUserResponse();
Log.Information("User logged in: {UserName}", user);
return user;
}
catch (Exception e)
{
transaction.CaptureException(e);
throw;
}
finally
{
transaction.End();
}
}
private ActionResult GenerateRandomUserResponse()
{
var random = new Random();
var index = random.Next(UserNames.Count);
return Ok(new { userName = UserNames[index] });
}
}
}