Простейшее расширение для перехвата запроса в owin pipeline
В сегодняшней небольшой заметке хотел бы поделиться очень простым расширением, которое, например, можно использовать для отслеживания uptime приложения (так же доступно на github gist).
Owin middleware:
public class UptimeMonitoringMiddleware
{
public UptimeMonitoringMiddleware(
Func<IDictionary<string, object>, Task> next, string path)
{
_next = next;
_path = path;
}
public async Task Invoke(IDictionary<string, object> environment)
{
var context = new OwinContext(environment);
if (context.Request.Path == PathString.FromUriComponent(_path ?? HttpPropertyKeys.UptimeMiddlewarePath))
{
await context.Response.WriteAsync("Uptime status: OK");
return;
}
await _next(environment);
}
private readonly Func<IDictionary<string, object>, Task> _next;
private readonly string _path;
}
public static class UptimeMiddlewareExtension
{
public static IAppBuilder UseUptimeMonitoringMiddleware(this IAppBuilder app, string path = null)
{
app.Use(typeof(UptimeMonitoringMiddleware), path);
return app;
}
}
Константа:
public static class HttpPropertyKeys
{
public static readonly string UptimeMiddlewarePath = "/uptime";
}