public async Task <QosGateEnterResult> TryEnterAsync(QosGateEnterContext context) { var count = await _store.GetAsync(context.Key); if (count > _maxCount) { return(new QosGateEnterResult() { Success = false }); } var originalBodyStream = context.HttpContext.Response.Body; var originalSendFileFeature = context.HttpContext.Features.Get <IHttpSendFileFeature>(); var wrapperStream = new BodyResponseStream(originalBodyStream, originalSendFileFeature); context.HttpContext.Response.Body = wrapperStream; if (originalSendFileFeature != null) { context.HttpContext.Features.Set <IHttpSendFileFeature>(wrapperStream); } return(new QosGateEnterResult() { Success = true, Data = originalBodyStream }); }
public async Task <QosGateEnterResult> TryEnterAsync(QosGateEnterContext context) { var result = await _store.TryAddAsync(context.Key, 1, _maxCount, _period); return(new QosGateEnterResult() { Success = result.Success }); }
public Task <QosGateEnterResult> TryEnterAsync(QosGateEnterContext context) { if (context.Key == "OK") { return(Task.FromResult(new QosGateEnterResult() { Success = true })); } return(Task.FromResult(new QosGateEnterResult() { Success = false })); }
public Task <QosGateEnterResult> TryEnterAsync(QosGateEnterContext context) { return(Task.FromResult(_enterFunc(context))); }