Skip to content

Instantly share code, notes, and snippets.

View Mirch's full-sized avatar
🎯
Focusing

Mircea Teodor Oprea Mirch

🎯
Focusing
View GitHub Profile
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello, World!");
});
Router router = new Router("routes.json");
app.Run(async (context) =>
{
var content = await router.RouteRequest(context.Request);
await context.Response.WriteAsync(await content.Content.ReadAsStringAsync());
});
{
"routes": [
{
"endpoint": "/movies",
"destination": {
"uri": "http://localhost:8090/movies/",
"requiresAuthentication": "true"
}
},
{
public class Destination
{
public string Uri { get; set; }
public bool RequiresAuthentication { get; set; }
static HttpClient client = new HttpClient();
public Destination(string uri, bool requiresAuthentication)
{
Uri = path;
RequiresAuthentication = requiresAuthentication;
private string CreateDestinationUri(HttpRequest request)
{
string requestPath = request.Path.ToString();
string queryString = request.QueryString.ToString();
string endpoint = "";
string[] endpointSplit = requestPath.Substring(1).Split('/');
if (endpointSplit.Length > 1)
endpoint = endpointSplit[1];
public async Task<HttpResponseMessage> SendRequest(HttpRequest request)
{
string requestContent;
using (Stream receiveStream = request.Body)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
requestContent = readStream.ReadToEnd();
}
}
public class JsonLoader
{
public static T LoadFromFile<T>(string filePath)
{
using (StreamReader reader = new StreamReader(filePath))
{
string json = reader.ReadToEnd();
T result = JsonConvert.DeserializeObject<T>(json);
return result;
}
public class Route
{
public string Endpoint { get; set; }
public Destination Destination { get; set; }
}
public class Router
{
public List<Route> Routes { get; set; }
public Destination AuthenticationService { get; set; }
public Router(string routeConfigFilePath)
{
dynamic router = JsonLoader.LoadFromFile<dynamic>(routeConfigFilePath);
public async Task<HttpResponseMessage> RouteRequest(HttpRequest request)
{
string path = request.Path.ToString();
string basePath = '/' + path.Split('/')[1];
Destination destination;
try
{
destination = Routes.First(r => r.Endpoint.Equals(basePath)).Destination;
}