79 lines
2.6 KiB
C#
79 lines
2.6 KiB
C#
|
using Microsoft.AspNetCore.Http;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace Ordering.API.Infrastructure.Middlewares
|
|||
|
{
|
|||
|
public class FailingMiddleware
|
|||
|
{
|
|||
|
private readonly RequestDelegate _next;
|
|||
|
private bool _mustFail;
|
|||
|
private readonly FailingOptions _options;
|
|||
|
public FailingMiddleware(RequestDelegate next, FailingOptions options)
|
|||
|
{
|
|||
|
_next = next;
|
|||
|
_options = options;
|
|||
|
_mustFail = false;
|
|||
|
}
|
|||
|
public async Task Invoke(HttpContext context)
|
|||
|
{
|
|||
|
var path = context.Request.Path;
|
|||
|
if (path.Equals(_options.ConfigPath, StringComparison.OrdinalIgnoreCase))
|
|||
|
{
|
|||
|
await ProcessConfigRequest(context);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if (_mustFail)
|
|||
|
{
|
|||
|
context.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
|
|||
|
context.Response.ContentType = "text/plain";
|
|||
|
await context.Response.WriteAsync("Failed due to FailingMiddleware enabled.");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
await _next.Invoke(context);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private async Task ProcessConfigRequest(HttpContext context)
|
|||
|
{
|
|||
|
var enable = context.Request.Query.Keys.Any(k => k == "enable");
|
|||
|
var disable = context.Request.Query.Keys.Any(k => k == "disable");
|
|||
|
|
|||
|
if (enable && disable)
|
|||
|
{
|
|||
|
throw new ArgumentException("Must use enable or disable querystring values, but not both");
|
|||
|
}
|
|||
|
|
|||
|
if (disable)
|
|||
|
{
|
|||
|
_mustFail = false;
|
|||
|
await SendOkResponse(context, "FailingMiddleware disabled. Further requests will be processed.");
|
|||
|
return;
|
|||
|
}
|
|||
|
if (enable)
|
|||
|
{
|
|||
|
_mustFail = true;
|
|||
|
await SendOkResponse(context, "FailingMiddleware enabled. Further requests will return HTTP 500");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// If reach here, that means that no valid parameter has been passed. Just output status
|
|||
|
await SendOkResponse(context, string.Format("FailingMiddleware is {0}", _mustFail ? "enabled" : "disabled"));
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
private async Task SendOkResponse(HttpContext context, string message)
|
|||
|
{
|
|||
|
context.Response.StatusCode = (int)System.Net.HttpStatusCode.OK;
|
|||
|
context.Response.ContentType = "text/plain";
|
|||
|
await context.Response.WriteAsync(message);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|