/// <summary> /// Processes a request to determine if it matches a known file, and if so, serves it. /// </summary> /// <param name="context"></param> /// <returns></returns> public Task Invoke(HttpContext context) { var fileContext = new StaticFileContext(context, _options, _matchUrl, _logger); if (!fileContext.ValidateMethod()) { _logger.LogRequestMethodNotSupported(context.Request.Method); } else if (!fileContext.ValidatePath()) { _logger.LogPathMismatch(fileContext.SubPath); } else if (!fileContext.LookupContentType()) { _logger.LogFileTypeNotSupported(fileContext.SubPath); } else if (!fileContext.LookupFileInfo()) { _logger.LogFileNotFound(fileContext.SubPath); } else { // If we get here, we can try to serve the file fileContext.ComprehendRequestHeaders(); switch (fileContext.GetPreconditionState()) { case StaticFileContext.PreconditionState.Unspecified: case StaticFileContext.PreconditionState.ShouldProcess: if (fileContext.IsHeadMethod) { return(fileContext.SendStatusAsync(Constants.Status200Ok)); } if (fileContext.IsRangeRequest) { return(fileContext.SendRangeAsync()); } _logger.LogFileServed(fileContext.SubPath, fileContext.PhysicalPath); return(fileContext.SendAsync()); case StaticFileContext.PreconditionState.NotModified: _logger.LogPathNotModified(fileContext.SubPath); return(fileContext.SendStatusAsync(Constants.Status304NotModified)); case StaticFileContext.PreconditionState.PreconditionFailed: _logger.LogPreconditionFailed(fileContext.SubPath); return(fileContext.SendStatusAsync(Constants.Status412PreconditionFailed)); default: var exception = new NotImplementedException(fileContext.GetPreconditionState().ToString()); Debug.Fail(exception.ToString()); throw exception; } } return(_next(context)); }
/// <summary> /// Processes a request to determine if it matches a known file, and if so, serves it. /// </summary> /// <param name="context"></param> /// <returns></returns> public Task Invoke(HttpContext context) { var fileContext = new StaticFileContext(context, _options, _matchUrl, _logger); if (fileContext.ValidateMethod() && fileContext.ValidatePath() && fileContext.LookupContentType() && fileContext.LookupFileInfo()) { fileContext.ComprehendRequestHeaders(); switch (fileContext.GetPreconditionState()) { case StaticFileContext.PreconditionState.Unspecified: case StaticFileContext.PreconditionState.ShouldProcess: if (fileContext.IsHeadMethod) { return(fileContext.SendStatusAsync(Constants.Status200Ok)); } if (fileContext.IsRangeRequest) { return(fileContext.SendRangeAsync()); } if (_logger.IsEnabled(LogLevel.Verbose)) { _logger.LogVerbose(string.Format("Copying file {0} to the response body", fileContext.SubPath)); } return(fileContext.SendAsync()); case StaticFileContext.PreconditionState.NotModified: if (_logger.IsEnabled(LogLevel.Verbose)) { _logger.LogVerbose(string.Format("{0} not modified", fileContext.SubPath)); } return(fileContext.SendStatusAsync(Constants.Status304NotModified)); case StaticFileContext.PreconditionState.PreconditionFailed: return(fileContext.SendStatusAsync(Constants.Status412PreconditionFailed)); default: var exception = new NotImplementedException(fileContext.GetPreconditionState().ToString()); _logger.LogError("No precondition state specified", exception); throw exception; } } return(_next(context)); }
/// <summary> /// Processes a request to determine if it matches a known file, and if so, serves it. /// </summary> /// <param name="context"></param> /// <returns></returns> public Task Invoke(HttpContext context) { var fileContext = new StaticFileContext(context, _options, _matchUrl, _logger); if (!fileContext.ValidateMethod()) { _logger.LogRequestMethodNotSupported(context.Request.Method); } else if (!fileContext.ValidatePath()) { _logger.LogPathMismatch(fileContext.SubPath); } else if (!fileContext.LookupContentType()) { _logger.LogFileTypeNotSupported(fileContext.SubPath); } else if (!fileContext.LookupFileInfo()) { _logger.LogFileNotFound(fileContext.SubPath); } else { // If we get here, we can try to serve the file fileContext.ComprehendRequestHeaders(); switch (fileContext.GetPreconditionState()) { case StaticFileContext.PreconditionState.Unspecified: case StaticFileContext.PreconditionState.ShouldProcess: if (fileContext.IsHeadMethod) { return fileContext.SendStatusAsync(Constants.Status200Ok); } if (fileContext.IsRangeRequest) { return fileContext.SendRangeAsync(); } _logger.LogFileServed(fileContext.SubPath, fileContext.PhysicalPath); return fileContext.SendAsync(); case StaticFileContext.PreconditionState.NotModified: _logger.LogPathNotModified(fileContext.SubPath); return fileContext.SendStatusAsync(Constants.Status304NotModified); case StaticFileContext.PreconditionState.PreconditionFailed: _logger.LogPreconditionFailed(fileContext.SubPath); return fileContext.SendStatusAsync(Constants.Status412PreconditionFailed); default: var exception = new NotImplementedException(fileContext.GetPreconditionState().ToString()); Debug.Fail(exception.ToString()); throw exception; } } return _next(context); }
/// <summary> /// Processes a request to determine if it matches a known file, and if so, serves it. /// </summary> /// <param name="context"></param> /// <returns></returns> public Task Invoke(HttpContext context) { var fileContext = new StaticFileContext(context, _options, _matchUrl, _logger); if (fileContext.ValidateMethod() && fileContext.ValidatePath() && fileContext.LookupContentType() && fileContext.LookupFileInfo()) { fileContext.ComprehendRequestHeaders(); switch (fileContext.GetPreconditionState()) { case StaticFileContext.PreconditionState.Unspecified: case StaticFileContext.PreconditionState.ShouldProcess: if (fileContext.IsHeadMethod) { return fileContext.SendStatusAsync(Constants.Status200Ok); } if (fileContext.IsRangeRequest) { return fileContext.SendRangeAsync(); } if (_logger.IsEnabled(LogLevel.Verbose)) { _logger.LogVerbose(string.Format("Copying file {0} to the response body", fileContext.SubPath)); } return fileContext.SendAsync(); case StaticFileContext.PreconditionState.NotModified: if (_logger.IsEnabled(LogLevel.Verbose)) { _logger.LogVerbose(string.Format("{0} not modified", fileContext.SubPath)); } return fileContext.SendStatusAsync(Constants.Status304NotModified); case StaticFileContext.PreconditionState.PreconditionFailed: return fileContext.SendStatusAsync(Constants.Status412PreconditionFailed); default: var exception = new NotImplementedException(fileContext.GetPreconditionState().ToString()); _logger.LogError("No precondition state specified", exception); throw exception; } } return _next(context); }
/// <summary> /// Processes a request to determine if it matches a known file, and if so, serves it. /// </summary> /// <param name="context"></param> /// <returns></returns> public Task Invoke(HttpContext context) { var fileContext = new StaticFileContext(context, _options, _matchUrl); if (fileContext.ValidateMethod() && fileContext.ValidatePath() && fileContext.LookupContentType() && fileContext.LookupFileInfo()) { fileContext.ComprehendRequestHeaders(); switch (fileContext.GetPreconditionState()) { case StaticFileContext.PreconditionState.Unspecified: case StaticFileContext.PreconditionState.ShouldProcess: if (fileContext.IsHeadMethod) { return fileContext.SendStatusAsync(Constants.Status200Ok); } if (fileContext.IsRangeRequest) { return fileContext.SendRangeAsync(); } return fileContext.SendAsync(); case StaticFileContext.PreconditionState.NotModified: return fileContext.SendStatusAsync(Constants.Status304NotModified); case StaticFileContext.PreconditionState.PreconditionFailed: return fileContext.SendStatusAsync(Constants.Status412PreconditionFailed); default: throw new NotImplementedException(fileContext.GetPreconditionState().ToString()); } } return _next(context); }